使用成员变量中的“this”对象引用

时间:2016-06-25 11:22:46

标签: java

我被要求说出这段代码的作用但我真的无法理解。 我试图在netbeans中执行它并得到答案6但实际上无法理解为什么。

public class Quattro {
    int x = 5;
    Quattro s = this;
    Quattro f(){
        s.s.s.x++;
        return s;
    }
    void g(){System.out.println(x);}
    public static void main (String[] args){
        Quattro a4 = new Quattro();
        a4.f().g();
    }
}

问题1: Quattro s = this;做什么?我是否指出了自己的指针?如果是这样,这意味着我可以写

Quattro f(){
            s.s.s.x++;
            return s;
        }

甚至

Quattro f(){
            s.s.s.s.s.s.s.s.x++;
            return s;
        }

我总会得到相同的结果,因为我在循环中?

问题2 :我不明白a4.f().g();做了什么......对我来说似乎很奇怪。

1 个答案:

答案 0 :(得分:1)

如果为成员变量分配this引用,则会有一个递归。是的,您添加的s个数量并不重要,因为它们始终是同一个对象,即this个对象。它和你写的一样:

this.this.this.this.this.this.x++;

函数f()在对其执行一些其他操作后返回对this对象的引用。它是Java中常见的设计模式,称为builder。将a4.f().g();添加到类的功能称为method chaining。换句话说,f()在通话结束时是this对象,就像s一样,所以你可以这样做:

a1.f().f().f().f().f().f();

这意味着您只需从f()对象调用a1函数6次。