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

泛型继承自接口
示例 : 想获取泛型 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个回答

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

图片说明

图片说明

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

new A<PostEntity,RoleEntity>(){}.test()
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐