栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将参数化的Class实例传递给构造函数

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

将参数化的Class实例传递给构造函数

问题是,您的构造函数需要一个

Class<T>
,并且
T
在您的代码中将其推断为
Argument<AnyOtherClassDescendant>

因此,您应该通过

Class<Argument<AnyOtherClassDescendant>>
,然后通过
Class<Argument>
。但是您不能像那样
Class
直接传递该实例
Argument<AnyOtherClassDescendant>.class

但是,您可以通过将类强制转换为所需实例来解决此问题:

public ProblematicClass() {    super((Class<Argument<AnyOtherClassDescendant>>)(Class<?>)Argument.class); }

请注意,如何首先将转换

Class<Argument>
Class<?>
,然后将最终的类型转换为
Class<Argument<AnyOtherClassDescendant>>
。没有简单的方法可以做到这一点。

其背后的原因是,

Class
与类本身相关联的泛型类型的所有参数化实例只有一个实例。通用类型的单个编译单元仅编译为单个类文件。我想这与C
++实施模板的方式不同。在那里,您将获得用于不同实例化的不同机器代码。

因此,如果执行以下代码,则将得到

true
输出:

List<String> strList = new ArrayList<String>();List<Integer> intList = new ArrayList<Integer>();boolean isSameClassInstance = strList.getClass() == intList.getClass();System.out.println(isSameClassInstance);


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

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

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