0

我有点困惑为什么以下内容无法编译:

public <E extends Object> E doSomething() {
    return new Object();
}

我已经对该问题进行了一些研究,并发现了各种修复方法,例如强制转换为 (E) 或使用类文字,但我仍然不确定上述内容到底有什么问题。

4

2 回答 2

5

它不起作用,因为虽然E将始终是 type的实例Object,但Object永远不会是 type 的实例E,但以下情况除外:

Object o = doSomething();  //If your code compiled, this call would work

在所有其他情况下,您都会遇到问题。在您发布的代码的上下文中考虑这个调用。

String s = doSomething();

这是行不通的,因为你的代码总是试图返回一个Object,即使你真的想要一个String. 编译器使您免于在运行时遇到这种情况。

于 2013-09-17T19:12:42.830 回答
1

您试图Object在一个方法中返回一个,其签名说它返回一个E,并且声称它E可以是任何子类Object。如果E是任何子类,那么 a Objectjust 还不足以声称是E.

于 2013-09-17T19:08:48.193 回答