记一下比较常用到的,又容易忘的
[TOC]
getInterfaces & getGenericInterfaces
获取类实现的接口列表,后者会进一步携带接口拥有的参数化类型信息
可以用这个方法获得类继承接口时,在接口泛型参数处填入的实际类型
getTypeParameters
获得一个类声明的泛型参数列表,如class A<T, K> {}
会返回[T, K]
,类型为TypeVariable
获得对象的泛型信息
类似于
public class Test<T> {
public void fun(T t){}
}
似乎无法得到一个实例他的泛型参数具体类型,此时通过method.getParameterTypes()
得到的是Object
如果是这种
public class Test<T> {
public void fun(List<T> t){}
}
得到的是List
,用method.getGenericParameterTypes()
也只能得到T
如果是这种,可以通过method.getGenericParameterTypes()
得到String
的信息
public void fun(List<String> t){}
泛型接口在不确定实现使用的类型参数的情况下,怎么调用含泛型的方法?
interface Functional<T>{
void call(T t);
}
class Function implements Functional<A> {
public void call(A t){...}
}
Functional<?> functional = new Function(); // 具体使用中不知道是哪一种实现
A a = new A();
// functional.call(a); 报错
涉及?的只能用来交接不能使用?