我是一名学习 Java 的 C# 人员,我正在尝试了解 Java 中的泛型如何工作。
给定一个类或接口“SomeThing”,我知道我可以这样做来获取该类型的类:
Something.class
现在,给定一个通用接口
我很想写
(GenericInterface<SomeClass>).class
但编译器不太喜欢。
谢谢你的帮助。
那是因为,由于擦除,有isn't a GenericInterface<SomeClass>
班级。只有一个GenericInterface
类,它有一个通用参数。
如果您需要它,以便可以调用一般类型安全的方法,例如Class.cast()
or Class.newInstance()
,那么你就不走运了。泛型本质上是一个编译时概念;运行时没有足够的信息来执行通用检查,因此这些方法can't对于任意类型都是类型安全的Class
实例。
在这种情况下你能做的最好的事情就是使用“原始”GenericInterface.class
,然后将结果显式转换为GenericInterface<SomeClass>
紧接着。这将正确地给出“未经检查”的警告,因为如上所述,没有运行时检查该对象是否确实具有正确的通用参数,并且 JVM 只需要相信您的话。
(同样,如果你想执行某种instanceof
检查一下,那么这也是不可能的。一个object其类没有通用参数;只有您分配给它执行的变量。因此,由于语言的设计限制,这些运行时检查显然是不可能的。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)