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 次 |
最近记录: |