我有点困惑为什么以下不编译:
public <E extends Object> E doSomething() {
return new Object();
}
Run Code Online (Sandbox Code Playgroud)
我对这个问题进行了一些研究,并发现了各种修复方法,例如转换为(E)或使用类文字,但我仍然不确定上述内容实际上是什么问题.
它不会因为工作,而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.编译器可以防止您在运行时遇到这种情况.
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |