jbe*_*ert 4 java generics reflection
我是一个学习Java的C#人员,我正在努力理解泛型如何在Java中工作.
给定一个类或接口"SomeThing",我知道我可以这样做以获得该类型的类:
Something.class
Run Code Online (Sandbox Code Playgroud)
现在,给出一个通用接口
我很想写
(GenericInterface<SomeClass>).class
Run Code Online (Sandbox Code Playgroud)
但编译器不喜欢那么多.
谢谢你的帮助.
那是因为,由于擦除,没有一个GenericInterface<SomeClass>班级.只有一个GenericInterface类,它有一个通用参数.
如果你想要它,以便你可以调用一般类型安全的方法,如Class.cast()或Class.newInstance(),那么你运气不好.泛型本质上是一个编译时的概念; 运行时没有足够的信息来执行通用检查,因此这些方法对于任意实例都不是类型安全的Class.
在这种情况下,您可以做的最好的事情是使用"原始" GenericInterface.class,然后GenericInterface<SomeClass>立即将结果显式地投射到之后.这将正确地给出"未经检查"的警告,因为如上所述,没有运行时检查对象确实具有正确的通用参数,并且JVM只需要接受你的话.
(沿着同样的路线,如果你正在尝试进行某种instanceof检查,那么这也是根本不可能的.一个对象没有一个通用参数给它的类;只有你指定它的变量.所以再次,由于语言的设计限制,这些运行时检查是不可能的.)
| 归档时间: |
|
| 查看次数: |
2980 次 |
| 最近记录: |