重新分配通用Java变量

bif*_*fta 0 java generics

我有点困惑为什么以下不编译:

public <E extends Object> E doSomething() {
    return new Object();
}
Run Code Online (Sandbox Code Playgroud)

我对这个问题进行了一些研究,并发现了各种修复方法,例如转换为(E)或使用类文字,但我仍然不确定上述内容实际上是什么问题.

Cod*_*ind 5

它不会因为工作,而E永远是类型的实例Object,Object将永远是类型的实例E,除了以下情况:

Object o = doSomething();  //If your code compiled, this call would work
Run Code Online (Sandbox Code Playgroud)

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

String s = doSomething();
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为你的代码总是会尝试返回一个Object,即使你真的想要一个String.编译器可以防止您在运行时遇到这种情况.