Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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 为什么我在施放X<;时会收到警告;?扩展项目>;至X<;项目>;?_Java - Fatal编程技术网

Java 为什么我在施放X<;时会收到警告;?扩展项目>;至X<;项目>;?

Java 为什么我在施放X<;时会收到警告;?扩展项目>;至X<;项目>;?,java,Java,我有一个类,它实现了一个接口,该接口声明了一个返回类型为的方法 X<Item> X 我用声明为返回的方法m()调用另一个类 X<? extends Item> X因为那可能是X,而不是X 你所做的事情本质上是不安全的;X的全部要点是因为aX基本上与相同,尽管它指的是Class而不是X…后续问题:(a)我想我们习惯于使用强制转换来告诉编译器我们知道某些东西是安全的,尽管编译器无法证明它,这通常不会产生警告;(b) 你在上面所说的“不是a”到底是什么意思?问题在于可替代

我有一个类,它实现了一个接口,该接口声明了一个返回类型为的方法

X<Item>
X
我用声明为返回的方法m()调用另一个类

X<? extends Item>

X因为那可能是
X
,而不是
X


你所做的事情本质上是不安全的;
X的全部要点是因为a
X基本上与相同,尽管它指的是
Class
而不是
X
…后续问题:(a)我想我们习惯于使用强制转换来告诉编译器我们知道某些东西是安全的,尽管编译器无法证明它,这通常不会产生警告;(b) 你在上面所说的“不是a”到底是什么意思?问题在于可替代性,并且设计良好的类型层次结构,如果汽车可以替代汽车,列表将可以替代列表。因此,我最初的问题仍然存在:究竟会出现什么问题,以及如何转换a
xan回答我的一个问题,我发现这很有帮助:警告不仅仅是因为编译器不知道强制转换是安全的。例如String s=(String)new Object();获取任何警告,即使编译器不知道强制转换是安全的。警告是因为编译器(a)不知道强制转换是安全的,并且(b)不会在强制转换点生成完整的运行时检查。将检查它是否为Hashmap,但不会检查它是否为HashmapTheodore Norvell 2013年2月28日16:46
return (X<Item>)other.m()