2019-03-20——Java反射 GenericDeclar
2019-03-20 本文已影响0人
烟雨乱平生
该接口定义了哪些地方可以定义类型变量(泛型)
继承体系
GenericDeclaration.png由继承体系可以看出我们定义泛型的类型变量只能在这三个地方——类、构造器和方法。
注意泛型变量的定义和使用是不同的,我们可以在Field上使用泛型变量,但不能在Field上声明泛型变量
该接口只声明了一个方法:
方法 | 说明 |
---|---|
getTypeParameters() | 返回实体上声明(定义)的所有的类型变量。 |
public class Info {
public static void main(String[] args) {
Arrays.stream(Info.class.getDeclaredMethods()).forEach(method->{
if("method".equalsIgnoreCase(method.getName())){
Parameter[] parameters = method.getParameters();
System.out.println("获取参数的类型");
for (Parameter parameter:parameters){
System.out.println(parameter.getType());
}
System.out.println("获取参数的参数化类型");
for (Parameter parameter:parameters){
System.out.println(parameter.getParameterizedType());
}
System.out.println("是否是类型变量");
for (Parameter parameter:parameters){
System.out.println(parameter.getParameterizedType() instanceof TypeVariable);
}
System.out.println("是否是参数化类型");
for (Parameter parameter:parameters){
System.out.println(parameter.getParameterizedType() instanceof ParameterizedType);
}
TypeVariable<Method>[] variables = method.getTypeParameters();
System.out.println("类型变量的名称");
for (TypeVariable variable:variables){
System.out.println(variable.getName());
}
}
});
}
<M,N> M method(M m,List<N> n){
return m;
}
}
输出结果是:
获取参数的类型
class java.lang.Object
interface java.util.List
获取参数的参数化类型
M
java.util.List<N>
是否是类型变量
true
false
是否是参数化类型
false
true
类型变量的名称
M
N