我有以下类获取参数化类参数的类型?
public class MyClass<T> {
public Class<T> getDomainClass() {
GET THE CLASS OF T
}
}
我GOOGLE了这个问题,我能找到的告诉我使用getGenericSuperClass()的所有答案,但这种方法的问题是,我必须有一个第二类扩展MyClass,我不想这样做。我需要的是获取具体类的参数化类型?
我有以下类获取参数化类参数的类型?
public class MyClass<T> {
public Class<T> getDomainClass() {
GET THE CLASS OF T
}
}
我GOOGLE了这个问题,我能找到的告诉我使用getGenericSuperClass()的所有答案,但这种方法的问题是,我必须有一个第二类扩展MyClass,我不想这样做。我需要的是获取具体类的参数化类型?
你不能。由于类型擦除,所需信息(即T的值)在运行时不可用。
如果你需要知道你可能不应该使用泛型的类型。
由于类型擦除,获取它的唯一方法是将其作为显式参数传递 - 无论是在方法中,还是在构造函数中。
public class MyClass<T> {
public Class<T> getDomainClass(Class<T> theClass) {
// use theClass
}
}
我知道的唯一途径:
public class MyClass<T> {
private Class<T> clazz;
public MyClass(Class<T> clazz) {
this.clazz = clazz;
}
public Class<T> getDomainClass() {
return clazz;
}
}
所以你基本上是提供运行时的信息,它不会从编译器有。
如果您想获得您继承的通用类型,您可以这样做!将此方法添加到您的课堂并获利! ;)
public Class<?> getGenericType() {
Class result = null;
Type type = this.getClass().getGenericSuperclass();
if (type instanceof ParameterizedType) {
ParameterizedType pt = (ParameterizedType) type;
Type[] fieldArgTypes = pt.getActualTypeArguments();
result = (Class) fieldArgTypes[0];
}
return result;
}
您是否看到:http://stackoverflow.com/questions/1901164/get-type-of-a-generic-parameter-in-java-with-reflection? – Campa 2015-09-04 10:53:33