我有一个泛型类,它有一个需要知道运行时类型的方法:
public class SomePOJO<TYPE> {
// ... lots of code
public void doSomething() {
// Obtain runtime type of TYPE and do something with it.
}
}
我尝试关注most upvoted answer of this question,并按照以下方式实施doSomething()
:
public void doSomething() {
// |<-- error starts here
Class clazz = (Class)((TYPE)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
然而,这会引发编译器错误:
对于类型TYPE
,方法getActualTypeArguments()未定义
我正在编译JDK 1.6u34 - 我哪里错了 - 为什么?
答案 0 :(得分:0)
正如评论中提到的,由于类型擦除,您无法在运行时获取类型。 我建议使用像:
这样的工厂方法class SomePOJO<TYPE> {
// Variable to store runtime type
Class<TYPE> klass;
private SomePOJO(Class<TYPE> klass) {
this.klass = klass;
}
// Lots of code
public void doSomething() {
// Do what you want with type
System.out.println(klass);
}
// Static factory method
public static <T> SomePOJO<T> createPojo(Class<T> klass) {
// Save class object that represents type to SomePOJO instance
return new SomePOJO<T>(klass);
}
}
它将帮助您保留doSomething()方法的类型。