栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

获取泛型T的class,java语言的缺陷

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

获取泛型T的class,java语言的缺陷

// 这句代码获取不到泛型class
new Test().getTClass();
  
// 这句代码可以获取到泛型class,因为是匿名内部类,本质也算继承了
new  Test(){}.getTClass()

// 这句代码正常获取泛型class,因为在继承的情况下是可以的
new TestImpl().getTClass();





public class Test {
    public Class getTClass() {
        return (Class) ((ParameterizedType) Test.this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
    }
}

public class TestImpl extends Test {
}

总结:

这样new Test()是获取不到泛型Class的,无解,我觉得是java的缺陷。

只有继承一下在获取才能获取到泛型Class,例如上面的TestImpl示例。

虽然new  Test(){}.getTClass()可以获取到泛型,但是我们提供基础类,不能要求使用者必须用匿名内部类,使用者容易写错,所以不建议这样用。

有没有想起来Gson就是这样做的?因为Gson家喻户晓,所以大家都记住了。

new Gson().fromJson("json",new TypeToken>(){}.getType());

如果想解决new Test()获取不到泛型的问题,可以这样设计:

public class TestNew {
    Class clazz;

    public TestNew(Class clazz) {
        this.clazz = clazz;
    }

    public Class getTClass() {
        return clazz;
    }
}


Class clazz3 = new TestNew(String.class).getTClass(); Log.e("clazz 3", clazz3.toString());

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1032894.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号