让我们以这段代码为例:
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(){
}
}
我正在尝试了解方法链接,并且正如在其他问题上所说的回答一样,请使用
return this
。我试过了,是的,它可以工作,但不适用于上面的方法setName()
的变异器方法。为何编译器输出:The return type is incompatible with Component.setName(String)
最佳答案
除非Maze从定义setName(String)
的其他类派生,否则Maze setName(String name)
签名应该是完全可以接受的
注意:您应该写this.name = name;
更新:事实证明,迷宫是从Panel
派生的(它是从Component
派生的)。由于Component.setName(String)
将其返回类型指定为void
(void setName(String)
),因此您不能指定任何其他返回类型,但必须在类中为void
指定setName()
。原因是继承:如果某人通过Maze
引用(例如Component
)引用了您的Component c = new Maze();
对象,并调用了setName()
,则由于继承,运行时知道要调用您的对象。但是,您的版本正在返回一个值,运行时必须使用该值执行某些操作,但是代码并未为此准备好(它是使用Component
知识编译的。