如果我有类似的东西:
class Test<T extends X> {
public T test() {
T t = /* ... */;
return t;
}
}
如何捕获T
的类以便实例化它?是否有防止类型擦除的解决方法?我什至不需要访问T
's 的方法,X
's 就可以了,但我需要返回一个T
.
如果我有类似的东西:
class Test<T extends X> {
public T test() {
T t = /* ... */;
return t;
}
}
如何捕获T
的类以便实例化它?是否有防止类型擦除的解决方法?我什至不需要访问T
's 的方法,X
's 就可以了,但我需要返回一个T
.
您唯一能做的就是将 T 的类作为额外参数传递给test()
或设置类中的成员字段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;
}
}
或者您可以将工厂对象传递给相同的效果。当您需要使用默认构造函数以外的东西时,这很有效。
将其定义为:
class Test<T extends X>
{
public T test(Class<T> c)
{
T t = c.newInstance();
return t;
}
}
并像这样使用它:
Test<Foo> t = new Test<Foo>();
t.test(Foo.class);
你不能直接做,但是你可以添加一个T实现的接口来创建一个实例,或者一个T的数组。