[英]Reassigning a generic Java variable
我有点困惑为什么以下内容无法编译:
public <E extends Object> E doSomething() {
return new Object();
}
我对问题进行了一些研究,发现了各种修复方法,例如强制转换为(E)或使用类文字,但是我仍然不确定上述内容实际上有什么问题。
这是行不通的,因为尽管E
始终是Object
类型的实例,但Object
永远不会是E
类型的实例,除了以下情况:
Object o = doSomething(); //If your code compiled, this call would work
在所有其他情况下,您将遇到问题。 在您发布的代码的上下文中考虑此调用。
String s = doSomething();
这将行不通,因为即使您确实需要String
,您的代码也会始终尝试返回Object
。 编译器使您免于在运行时遇到这种情况。
您正在尝试通过签名返回E
的方法返回Object
,该方法声称E
可以是Object
任何子类。 如果E
根本不是任何子类,则Object
不足以声称是E
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.