gpt4 book ai didi

java - 使用泛型获取 java.lang.Class

转载 作者:搜寻专家 更新时间:2023-11-01 01:23:21 24 4
gpt4 key购买 nike

我是一名学习 Java 的 C# 人员,我正在尝试了解泛型在 Java 中的工作原理。

给定一个类或接口(interface)“SomeThing”,我知道我可以这样做以获得该类型的类:

Something.class

现在,给定一个通用接口(interface)

我想写

(GenericInterface<SomeClass>).class 

但是编译器不太喜欢。

感谢您的帮助。

最佳答案

那是因为,由于删除,没有 GenericInterface<SomeClass>类(class)。只有一个 GenericInterface类,它有一个通用参数。

如果您需要它,以便您可以调用一般类型安全的方法,例如 Class.cast()Class.newInstance() ,那你就不走运了。泛型本质上是一个编译时概念;在运行时没有足够的可用信息来执行通用检查,因此这些方法不能对于任意 Class 是类型安全的实例。

在这种情况下你能做的最好的就是使用“原始”GenericInterface.class , 然后明确地将结果转换为 GenericInterface<SomeClass>紧接着。这将正确地给出“未检查”警告,因为如上所述,没有运行时检查对象是否确实具有正确的通用参数,JVM 只需要相信您的话。

(同理,如果您尝试执行某种 instanceof 检查,那也是不可能的。对象 没有其类的通用参数; 只有你分配给它的变量。因此,由于语言的设计限制,这些运行时检查是不可能的。)

关于java - 使用泛型获取 java.lang.Class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7823672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com