Java:参数化实现的内部类中不需要的类型擦除
好的,我有一个参数化接口,它的实现有一个内部类。似乎我无论如何都不能引用内部类的完整(泛型)类型,因为它本身不是参数化的,只有隐式使用封闭类的类型参数:Java:参数化实现的内部类中不需要的类型擦除,java,types,inner-classes,type-erasure,Java,Types,Inner Classes,Type Erasure,好的,我有一个参数化接口,它的实现有一个内部类。似乎我无论如何都不能引用内部类的完整(泛型)类型,因为它本身不是参数化的,只有隐式使用封闭类的类型参数: public interface TestA<R> { public Class<? extends R> getTheRClass(); } public class TestB<Z> implements TestA<TestB<Z>.InnerStuff> { p
public interface TestA<R> {
public Class<? extends R> getTheRClass();
}
public class TestB<Z> implements TestA<TestB<Z>.InnerStuff> {
public class InnerStuff {
List<R> iCantBeStatic;
}
InnerStuff myStuff;
@Override
public Class<? extends TestB<Z>.InnerStuff> getTheRClass() {
// return InnerStuff.class;
// return myStuff.getClass();
// return TestB.InnerStuff.class;
// return TestB<Z>.InnerStuff.class;
throw new AngryProgrammerException();
}
}
公共接口测试{
public Class由于擦除,您返回的实际Class
实例在内部将只是TestB.InnerStuff.Class
;运行时
部分实际上并不存在。因此,您使用return TestB.InnerStuff.Class
的本能是出于金钱考虑的。要让它正常工作,您只需在说服编译器不要尖叫的原始类型Class
:
return (Class)TestB.InnerStuff.class;
(然后,您可以添加一个注释,如@SuppressWarnings({“unchecked”,“rawtypes”})
,告诉编译器您不需要此警告消息。)