我正在尝试在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

这就是为什么通常我们只返回比签名要求更多的限制类型的原因。

10-06 03:31