我有点困惑为什么以下内容无法编译:
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 Objectjust 还不足以声称是E.