我正在创建一个泛型类,并且在其中一种方法中我需要知道当前使用的泛型类型的类。原因是我调用的方法之一期望 this 作为参数。
例子:
public class MyGenericClass<T> {
public void doSomething() {
// Snip...
// Call to a 3rd party lib
T bean = (T)someObject.create(T.class);
// Snip...
}
}
显然,上面的示例不起作用并导致以下错误:类型参数 T 的非法类文字。
我的问题是:有人知道一个好的替代方案或解决方法吗?
最佳答案
还是同样的问题:通用信息在运行时被删除,无法恢复。一种解决方法是在静态方法的参数中传递类 T:
public class MyGenericClass<T> {
private final Class<T> clazz;
public static <U> MyGenericClass<U> createMyGeneric(Class<U> clazz) {
return new MyGenericClass<U>(clazz);
}
protected MyGenericClass(Class<T> clazz) {
this.clazz = clazz;
}
public void doSomething() {
T instance = clazz.newInstance();
}
}
它很丑,但它有效。
关于java - 如何确定泛型类型的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/182636/