java 泛型反射 获取失败
public class Parent<T> {
}
public class Children<T> extends Parent<T> {
private Class<T> type;
public Class<T> getType() {
Type actualTypeArgument = ((ParameterizedType) getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
return (Class<T>) actualTypeArgument;
}
public static void main(String[] args) {
Children<String> children = new Children<>();
Class<String> type = children.getType();
System.out.println(type.getName());
}
}
想要获取泛型的Class,但是失败了:Exception in thread "main" java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class
为什么Type强转Class失败了呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
因为泛型擦除,所以只能拿到T拿不到具体类型(如果能拿到的话就太好了…
这种场景想拿到必须有个子类具体指定了T的类型,比如改成这样就能拿到了:
我的理解:
这段代码,拿的应该是父类的泛型类型。 但是,Children<T> 继承 Parent<T>。 此时返回的 参数是 T。 这个不是一个 class。 如果 将代码修改为 Children<T> extends Parent<String>。 那么这时候,代码就不会报错了。