我很想了解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失败的确切原因。
InnerClass
是Test
的内部类,需要泛型参数。因此,您需要将类声明更新为:
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