我正在阅读“Thinking in Java”和解释this
关键字的段落,作者使用以下示例
public class Leaf {
int i = 0;
Leaf increment() {
i++;
return this;
}
void print() {
System.out.println("i = " + i);
}
public static void main(String[] args) {
Leaf x = new Leaf();
x.increment().increment().increment().print();
}
}
我想知道的是,如何理解increment()
方法返回的内容?作者解释说,它返回对当前对象的引用。这是否意味着语句x.increment()
正在返回一种x
(我知道什么参考意思)?在首次执行x.increment().increment().increment().print();
后开始声明x.increment()
,成为x.increment().increment().print();
?
这听起来合乎逻辑,但我不确定我是否理解它。
答案 0 :(得分:3)
return this
会返回当前实例,如果您想继续对其进行更改,这非常方便。
JDK的一个很好的例子是StringBuilder
。例如,这段代码没有错:
StringBuilder builder = new StringBuilder();
builder.append("welcome");
builder.append("to");
builder.append("StackOverflow");
但这看起来不是更好吗?
StringBuilder builder = new StringBuilder().append("welcome").append("to").append("StackOverflow");
答案 1 :(得分:1)
increment()
的方法签名是
Leaf increment()
表示它返回Leaf
个实例。
return this
表示返回正在调用的Leaf类的实例(在您的情况下称为x
)。
x.increment().increment().increment().print();
与
相同x.increment();
x.increment();
x.increment();
x.print();
答案 2 :(得分:1)
您可以将this
可视化为隐藏参数,该参数包含对执行该方法的实例的引用。要知道每次执行时this
包含什么,您必须查看将方法与实例分开的点左侧的内容。