Java 通用返回类型-为什么可以';我不能这样做吗?
考虑下面的代码片段。我理解重写如何与泛型类型相关,以及为什么允许返回类型Java 通用返回类型-为什么可以';我不能这样做吗?,java,generics,inheritance,return-type,Java,Generics,Inheritance,Return Type,考虑下面的代码片段。我理解重写如何与泛型类型相关,以及为什么允许返回类型List(例如)重写List多态性不能向后工作 如果您使用扩展了X的另一个类进行了尝试,但它返回了一个\ Map<String, NonString> Map 相反 Map<String, String> map = instance2.getMap(); // 1 同样的道理也适用。实例的编译时类型是A,而A.getList()返回您在X上调用的getMap(因为instance2是通过X引用
List
(例如)重写List多态性不能向后工作
如果您使用扩展了X
的另一个类进行了尝试,但它返回了一个\
Map<String, NonString>
Map
相反
Map<String, String> map = instance2.getMap(); // 1
同样的道理也适用。实例
的编译时类型是A
,而A.getList()
返回您在X
上调用的getMap
(因为instance2
是通过X
引用的),它被定义为返回Map
,因此问题就出现了
如果在调用getMap()
之前将调用更改为(typecastinstance2
为Y
):
Map=((Y)instance2.getMap();//1.
它应该可以工作,因为你的实例2
仍然是类型Y
我知道已经有答案了,但是你能发布编译器错误吗?很抱歉回复太晚,我收到了一个常规静态类型检查错误(即“无法从列表转换”)
Map<String, String> map = instance2.getMap(); // 1
List<String> list = instance.getList(); // 2
class A { Object getObject(); }
class B extends A { String getObject(); }
A a = new B();
String s = a.getObject();
String s = ((B) a).getObject();
String s = (String) a.getObject();
Map<String, String> map = ((Y)instance2).getMap(); // 1