如何引用内部类成员的泛型类型



我很想了解testInnerClass编译失败的原因,引用了:

不兼容的类型:对象无法转换为字符串。

import java.util.List;
class Test<
I extends Test.InnerClass,
S extends Test.StaticInnerClass,
O extends OtherClass> {
void testOtherClass(O other) {
String firstString = other.strings.get(0); //this works
}

void testStaticInnerClass(S staticInner) {
String firstString = staticInner.strings.get(0); //this works
}

void testInnerClass(I inner) {
String firstString = inner.strings.get(0); //this fails:
//"incompatible types: Object cannot be converted to String" 
}
static class StaticInnerClass {
List<String> strings;
}

class InnerClass {
List<String> strings;
}
}
class OtherClass {
List<String> strings;
}

CCD_ 2和CCD_ 3按我的预期工作,但我不确定CCD_ 4失败的确切原因。

InnerClassTest的内部类,需要泛型参数。因此,您需要将类声明更新为:

class Test<
I extends Test<I,S,O>.InnerClass,
S extends Test.StaticInnerClass,
O extends OtherClass>

StaticInnerClass,即使在Test内部,它也被声明为static。因此,与每个static方法或变量一样,static类也不依赖于该类的任何状态。因此不需要S extends Test<I,S,O>.StaticInnerClass

最新更新