我有以下课程
public class MyClass<T> {
public Class<T> getDomainClass() {
GET THE CLASS OF T
}
}
我已经搜索了这个问题,我找到的所有答案都告诉我使用getGenericSuperClass(),但这个方法的问题是我必须有第二个类扩展MyClass而我不想这样做。我需要的是获得具体类的参数化类型?
答案 0 :(得分:5)
你做不到。由于类型擦除,所需的信息(即T的值)在运行时不可用。
答案 1 :(得分:3)
由于类型擦除,获取它的唯一方法是将它作为显式参数传递 - 无论是在方法中还是在构造函数中。
public class MyClass<T> {
public Class<T> getDomainClass(Class<T> theClass) {
// use theClass
}
}
答案 2 :(得分:3)
我知道的唯一方法:
public class MyClass<T> {
private Class<T> clazz;
public MyClass(Class<T> clazz) {
this.clazz = clazz;
}
public Class<T> getDomainClass() {
return clazz;
}
}
因此,您基本上为运行时提供信息,而不是编译器。
答案 3 :(得分:1)
如果你想获得你继承的泛型类型,你可以这样做!将此方法添加到您的课程并获利! ;)
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;
}
答案 4 :(得分:0)
如果你需要知道类型,你可能不应该使用泛型。