我正在尝试在Java 6中实现这一点:
abstract class CurrClass{
public <T extends CurrClass> T setField (String str) {
return this;
}
}
编译器抱怨错误:Type mismatch: cannot convert from CurrClass to T.
添加演员表,并显示警告:"return (T) this;"
有没有更干净的语法可以做到这一点?为什么需要演员表?
返回类型比返回的对象更具限制性。这就是为什么编译器生成错误(以及随后的警告)的原因。考虑这种情况:
class A extends CurrClass {}
class B extends CurrClass {}
...
A myObject = new B().setField("stringhere");
这在您的设置中是完全合法的,但会导致ClassCastException
。
这就是为什么通常我们只返回比签名要求更多的限制类型的原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句