"
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失败了呢?
"
因为泛型擦除,所以只能拿到T拿不到具体类型(如果能拿到的话就太好了…
这种场景想拿到必须有个子类具体指定了T的类型,比如改成这样就能拿到了:
Children<String> children = new Children<String>(){};
######
我的理解:
这段代码,拿的应该是父类的泛型类型。 但是,Children<T> 继承 Parent<T>。 此时返回的 参数是 T。 这个不是一个 class。 如果 将代码修改为 Children<T> extends Parent<String>。 那么这时候,代码就不会报错了。
Type actualTypeArgument = ((ParameterizedType) getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
" ![image.png](https://ucc.alicdn.com/pic/developer-ecology/2eb7c109955e4690b49d434e9454e67f.png)版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。