我有点困惑为什么以下内容无法编译:
public <E extends Object> E doSomething() {
return new Object();
}
我已经对该问题进行了一些研究,并发现了各种修复方法,例如强制转换为 (E) 或使用类文字,但我仍然不确定上述内容到底有什么问题。
它不起作用,因为虽然E
将始终是 type的实例Object
,但Object
永远不会是 type 的实例E
,但以下情况除外:
Object o = doSomething(); //If your code compiled, this call would work
在所有其他情况下,您都会遇到问题。在您发布的代码的上下文中考虑这个调用。
String s = doSomething();
这是行不通的,因为你的代码总是试图返回一个Object
,即使你真的想要一个String
. 编译器使您免于在运行时遇到这种情况。
您试图Object
在一个方法中返回一个,其签名说它返回一个E
,并且声称它E
可以是任何子类Object
。如果E
是任何子类,那么 a Object
just 还不足以声称是E
.