Her*_*ios 0 java generics class
我有一堂课MyClass<GenericArg>
怎么才能上课呢?我试过了 :
MyClass<GenericArg>.class
Run Code Online (Sandbox Code Playgroud)
它没有编译.
我尝试了MyClass.class它编译,但有一个警告,我不喜欢警告.是否有可能避免这种警告(当然没有抑制警告!)?
编辑:
我有一个函数构造(Class myClass),其中T扩展了AbstractClass
在构造方法中,我实例化T并返回它:
myClass.newInstance();
return myClass;
Run Code Online (Sandbox Code Playgroud)
当我打电话时,我有:
public class SubClass<myEnum extends Enum<myEnum> extends AbstractClass<myEnum>
{
public static SubClass<myEnum> getSubClass()
{
return construct(SubClass.class);
}
}
Run Code Online (Sandbox Code Playgroud)
类文字MyClass<GenericType>.class是非法的,因为它在运行时不存在.Java泛型通过擦除实现,因此字节代码为:
MyClass<GenericType1>
MyClass<GenericType2>
MyClass
Run Code Online (Sandbox Code Playgroud)
all共享相同的运行时Class对象.获得编译器错误是件好事,因为泛型类文字不是类型安全的.
Java编译器保证您的代码在没有错误或警告的情况下编译时将是类型安全的.当您收到此特定警告时,这是因为Java环境告诉您它无法保证代码的类型安全性.此时,您有责任评估您的代码并确定您(或不)正在尝试做的事情是否安全.
如果它是类型安全的(并且仅当),那么您应该@SuppressWarnings在最短的代码块中应用注释,并使用注释来解释代码仍然是类型安全的.如果您无法想到任何此类评论,那么您可能希望重构您的设计以获得更好的类型安全性.