开发者社区> 问答> 正文

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失败了呢?

" ![image.png](https://ucc.alicdn.com/pic/developer-ecology/5075cd0d561b48b69c883a34e7103a9f.png)

展开
收起
因为相信,所以看见。 2020-05-25 15:58:17 973 0
1 条回答
写回答
取消 提交回答
  • 阿里,我所有的向往

    "

    因为泛型擦除,所以只能拿到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)
    2020-05-25 22:53:16
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载