rid*_*rid 5 java generics type-erasure
如果我有类似的东西:
class Test<T extends X> {
public T test() {
T t = /* ... */;
return t;
}
}
Run Code Online (Sandbox Code Playgroud)
我如何捕获T
类,以便实例化它?是否有防止类型擦除的变通方法?我甚至不需要访问T
的方法,它X
会做得很好,但我需要返回一个T
.
您唯一能做的就是将 T 的类作为额外参数传递给test()
class 或设置 class 中的成员字段Test
。您无法阻止类型擦除。
class Test<T extends X> {
private Class<T> mClass;
public Test(Class<T> c) {
mClass = c;
}
public T test() {
T t = mClass.newInstance();
return t;
}
}
Run Code Online (Sandbox Code Playgroud)
或者您可以传递一个工厂对象来达到相同的效果。当您需要使用默认构造函数以外的东西时,这很有效。