gde*_*ohn 3 java generics reflection
看看这个.
import java.lang.reflect.*;
import java.util.Arrays;
class Test {
class Inner {
public <T> Inner(T arg) {}
}
public static void main(String[] args) {
Constructor<?> constructor = Test.Inner.class.getConstructors( )[0];
System.out.println(
"Regular parameters: " +
Arrays.toString(constructor.getParameterTypes()) +
"\nGeneric parameters: " +
Arrays.toString(constructor.getGenericParameterTypes())
);
}
}
Run Code Online (Sandbox Code Playgroud)
运行此打印以下内容.
常规参数:[类Test,类java.lang.Object]
通用参数:[T]
我对Java内部类(即非静态)的理解是它们的构造函数隐式地为它们的封闭类提供了一个参数.因此,要获取实例Inner,您可以像这样调用它的构造函数.
Test.Inner foo = new Test().new Inner(new Object());
Run Code Online (Sandbox Code Playgroud)
实际发生的是将实例Test传递给构造函数Inner(以及任何其他参数),并将其分配给隐式实例字段.
检查这个结构的nullary构造函数Inner,因为调用getParameterTypes返回一个包含Class表示Test和Object(擦除T)的对象的数组.
但是,由于构造函数是通用的,因此调用getGenericParameterTypes将返回仅包含类型变量的数组T.缺少封闭类的隐式参数.
只有当内部类构造函数声明一个类型变量时,才会发生这种情况.为什么这样做?这是一个错误吗?
| 归档时间: |
|
| 查看次数: |
310 次 |
| 最近记录: |