如何从我的具体类中获取泛型类型。例如,我有:
class MyClass<String>
{
public Type getGenericType
{
// how can I return String.class in here?
}
}我可以用下面这样的抽象类做到这一点:
abstract class MyClass<String>
{
public Type getGenericType
{
Type t = this.getClass().getGenericSuperclass();
return ((ParameterizedType)t).getActualTypeArguments()[0];
}
}如何像抽象类一样对具体类进行类似的操作。如果我做不到,你能解释一下为什么吗?
谢谢,
发布于 2011-05-27 13:05:35
您不能这样做,因为一旦编译了代码,泛型甚至不再存在。
你的String实际上就变成了Object。
当您的代码试图在编译后运行时,这显然会造成问题……
发布于 2011-05-27 13:12:20
尝试如下所示:
public class MyClass<T> {
private final Class<T> type;
@SuppressWarnings("unchecked")
public MyClass() {
type = (Class<T>) this.getClass();
}
public Class<T> getGenericType() {
return type;
}
}发布于 2011-05-27 13:50:12
在这个阶段,Java不支持泛型的reification。但是,可以在运行时获取字段和方法的参数类型信息。This article对这个问题有很好的洞察力。对于类,显式地将参数类型传递到构造函数中通常比较方便:
class ClassWithParameter<T> {
private final Class<T> parameterType;
public ClassWithParameter(final Class<T> parameterType) {
this.parameterType = parameterType;
}
... }或者,可以创建一个带有Class属性的自定义运行时注释,并使用它来注释类,这些类在运行时需要参数类型信息。
https://stackoverflow.com/questions/6147962
复制相似问题