如何理解使用“return this”时返回的方法

时间:2014-12-31 21:51:46

标签: java fluent

我正在阅读“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();

这听起来合乎逻辑,但我不确定我是否理解它。

3 个答案:

答案 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包含什么,您必须查看将方法与实例分开的点左侧的内容。