获取带有泛型的 java.lang.Class

2023-12-30

我是一名学习 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(使用前将#替换为@)

获取带有泛型的 java.lang.Class 的相关文章

随机推荐