我被要求说出这段代码的作用但我真的无法理解。
我试图在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();
做了什么......对我来说似乎很奇怪。
答案 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次。