Java 如何引用内部类成员的泛型类型?
我很想知道为什么Java 如何引用内部类成员的泛型类型?,java,generics,nested,inner-classes,type-erasure,Java,Generics,Nested,Inner Classes,Type Erasure,我很想知道为什么testinerclass无法编译,原因是: 不兼容类型:无法将对象转换为字符串 import java.util.List; 课堂测试< 我扩展了Test.InnerClass, S扩展了Test.StaticInnerClass, O扩展其他类>{ void testOtherClass(O其他){ String firstString=other.strings.get(0);//这很有效 } void testStaticInnerClass(S staticInner)
testinerclass
无法编译,原因是:
不兼容类型:无法将对象转换为字符串
import java.util.List;
课堂测试<
我扩展了Test.InnerClass,
S扩展了Test.StaticInnerClass,
O扩展其他类>{
void testOtherClass(O其他){
String firstString=other.strings.get(0);//这很有效
}
void testStaticInnerClass(S staticInner){
String firstString=staticInner.strings.get(0);//这很有效
}
无效测试类(I内部){
String firstString=internal.strings.get(0);//此操作失败:
//“不兼容的类型:无法将对象转换为字符串”
}
静态类StaticInnerClass{
列出字符串;
}
类内部类{
列出字符串;
}
}
另一类{
列出字符串;
}
testStaticInnerClass
和testOtherClass
的工作与我预期的一样,但我不确定testInnerClass
失败的原因。InnerClass
是Test
的内部类,它需要泛型参数。
因此,您需要将类声明更新为:
类测试<
我扩展了Test.InnerClass,
S扩展了Test.StaticInnerClass,
O扩展其他类>
StaticInnerClass
,即使在Test
内部,也被声明为static
。因此,与每个static
方法或变量一样,static
类也不依赖于类的任何状态。因此,不需要进行扩展测试。基于OP最新更新的StaticInnerClass新解决方案将是Test
。无论如何,更多关于这个问题的信息:啊哈!感谢高瑟姆的清晰、简洁的回答。