Java-java泛型中父类如何知道子类传递的Class类型

发布于 2016-12-05 09:17:17 字数 67 浏览 1226 评论 4

例如设计一个BaseDAO<T>,我想得到T的Class对象,但是T.class是非法的,那么该如何获取呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

清晨说ぺ晚安 2017-07-02 23:45:19
abstract class BaseDao <T>{
    public void getType(){
        Type t = getClass().getGenericSuperclass();  
        ParameterizedType p = (ParameterizedType) t ;  
        System.out.println(p.getActualTypeArguments()[0]);
    }
}

public class SubDao extends BaseDao<String> {
    @Test
    public void test1(){
        getType();
    }
}
偏爱自由 2017-05-28 15:43:21

另外 既然你使用了泛型 就不要针对特定的类型做特殊的处理 如果你有这种需求 那不如不要用泛型 否则毫无意义

晚风撩人 2017-05-27 12:26:57

Java泛型的类型是无法在运行时通过反射取得的,泛型类型在编译成字节码的时候已经被虚拟机给去掉了,只是起到提示编译器进行类型检查的作用。记得Java里的泛型是通过擦除的方式实现的。具体可以参考《Java编程思想》吧。里面有详细的讲解Java泛型实现的机制。
有人写了如何获取泛型,可以参考这篇文章 http://blog.csdn.net/sunguangran/article/details/6152236

晚风撩人 2017-02-18 09:48:23

可以这么获取

Type t = getClass().getGenericSuperclass();
ParameterizedType p = (ParameterizedType) t ;
Class<T> c = (Class<T>) p.getActualTypeArguments()[0];

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文