好的,所以我有一个参数接口,其实现有一个内部类。似乎我不能以任何方式引用内部类的完整(泛型)类型,因为它本身不是参数化的,只有implicity使用封闭类'type参数:
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();
}
}
有没有办法返回有问题的类并让编译器识别正确的类型?是的,我知道有1,001种解决问题的方法(使内部类静态,重构因此没有内部类等等)我想知道是否有一个表达式在该覆盖中起作用,或者如果不存在这样的表达......
答案 0 :(得分:2)
由于删除,您返回的实际Class
实例内部只有TestB.InnerStuff.class
; <Z>
部分在运行时实际上不存在。所以你对return TestB.InnerStuff.class
的直觉就是金钱。要使其工作,您需要做的就是向原始类型Class
添加强制转换以说服编译器不要尖叫:
return (Class)TestB.InnerStuff.class;
(然后您可以添加类似@SuppressWarnings({ "unchecked", "rawtypes" })
的注释,告诉编译器您不需要警告消息。)