返回类型不兼容:Mutators和Method Chaining

Jür*_*aul 0 java method-chaining

我们将这段代码视为我们的示例:

import java.awt.*;

class Maze extends Panel{

    String name;

    public static void main(String[] args){
        Maze m = new Maze();
        System.out.println(m.setName("Hello World").getName());
    }

    public Maze setName(String name){
        this.name = name;
        return this;
    }

    public String getName(){
        return name;
    }

    public void paint(){

    }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试理解方法链,并且正如其他问题的答案,请使用return this.我尝试了它,是的它可行,但不是像setName()上面的方法那样的mutator方法.为什么编译器输出:

The return type is incompatible with Component.setName(String)
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 8

你给的代码应该没问题.

但是,我怀疑问题是你的真实代码是一个类扩展Component,并且你试图覆盖 setName.

也许相反,你可以编写一个withName方法,如下所示:

public Maze withName(String name) {
    setName(name); // Inherited method
    return this;
}
Run Code Online (Sandbox Code Playgroud)

...虽然您应该知道,withXyz通常在API中使用它来创建类型的实例(特别是不可变类型),而不是修改现有实例.