Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通用返回类型-为什么可以';我不能这样做吗?_Java_Generics_Inheritance_Return Type - Fatal编程技术网

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()
之前将调用更改为(typecast
instance2
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