gengdaolu_xiazai 2019-11-05 11:43 采纳率: 0%
浏览 6415
已结题

如何获取java泛型的真实Class类型?

泛型继承自接口
示例 : 想获取泛型 K 和 V 的类型

public class RedisCache<K, V> implements Cache<K, V> {
    public V get(K key) throws CacheException {
        Class value_clazz = ... //想要获取泛型V的真实class
        //...
    }
}

我使用 clazz.getGenericSuperclass的方式获取ParameterizedType但是强转失败

Class clazz = this.getClass() ;
Type gs_type = clazz.getGenericSuperclass();
ParameterizedType pt = (ParameterizedType)gs_type ;

发生以下异常 :

java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType

  • 写回答

3条回答 默认 最新

  • zhshchilss 2019-11-05 17:02
    关注

    图片说明

    图片说明

    评论
  • candyguy242 2019-11-06 16:51
    关注

    最后那种方式要写成子类方式,在构造方法后面加上花括号,比如:

    new A<PostEntity,RoleEntity>(){}.test()
    
    评论
  • 毕小宝 博客专家认证 2019-11-05 14:05
    关注

    你可以反编译看看这段代码,其实泛型时一种语法糖,最终统一都是 Object 类型,而不是编码时指定的类型。
    结论是:编译器底层并不会存储泛型类型的,也不可能得到泛型的真实的 Class 类型。

    评论

报告相同问题?

悬赏问题

  • ¥15 matlab最小二乘法拟合非线性曲线提问
  • ¥15 电脑锁屏时vba运行SAP,excel数据不能复制到SAP
  • ¥50 74LS系列 74LS00 74LS04设计一个RS485电路(关键词-差分)
  • ¥30 各位help写一下代码
  • ¥15 在运行SDEdit模型下载不了
  • ¥15 求51控制l298n驱动的小车中超声波避障怎么写
  • ¥15 电脑连上WIFI却用不了
  • ¥30 MATLAB在RLC电路的固有响应和阶跃响应GUI仿真报告
  • ¥15 hyper-v出现的问题
  • ¥15 有能用的可加酬金,求可以批量下载懒人听书的软件,能登录自己帐号的。