我正在尝试在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
。这就是为什么通常我们只返回比签名要求更多的限制类型的原因。