在运行时获取通用类的类
我怎样才能做到这一点?
public class GenericClass<T>
{
public Type getMyType()
{
//How do I return the type of T?
}
}
到目前为止我尝试过的所有东西总是返回Object
类型而不是使用的特定类型。
正如其他人所提到的,只有在某些情况下才可以反思。
如果您真的需要这种类型,这是通常的(类型安全的)解决方法模式:
public class GenericClass<T> {
private final Class<T> type;
public GenericClass(Class<T> type) {
this.type = type;
}
public Class<T> getMyType() {
return this.type;
}
}
我看到过这样的事情
private Class<T> persistentClass;
public Constructor() {
this.persistentClass = (Class<T>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
}
在休眠GenericDataAccessObjects示例中
泛型在运行时没有实现。 这意味着信息在运行时不存在。
在保持向后兼容性的同时向Java添加泛型是一个参考化的过程(你可以看到关于它的开创性论文:使未来变得安全:为Java编程语言增加了通用性)。
关于这个问题有很多文献,有些人对目前的状态不满,有些人说实际上这是一种诱惑,并没有真正的需要。 你可以阅读这两个链接,我发现它们很有趣。
链接地址: http://www.djcxy.com/p/57841.html上一篇: Get generic type of class at runtime
下一篇: Specialize implementation of GenericType<A,B> for case A == B?