提问人:blekione 提问时间:3/20/2014 更新时间:3/21/2014 访问量:942
当使用“return this”时,什么是返回类?
What is returning class when use "return this"?
问:
我开始学习 Java,但我无法理解“Thinking in Java”书中的一个例子。 在这个例子中,作者表示,正如他所说,“'this'关键词的简单使用”:
//Leaf.java
//simple use of the "this" keyword
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()
它不是变量,它不是对象?我只是不明白。我试图修改程序以理解它(例如替换为或代替),但编译器显示错误。i
x
return this
return i
print x
i
答:
2赞
Juned Ahsan
3/20/2014
#1
return this;
将返回当前对象,即用于调用该方法的对象。在本例中,将返回类型的对象。x
Leaf
评论
0赞
blekione
3/20/2014
这就是我所坚持的,但为什么要用 System.out.println(“i = ” + x);不起作用?
0赞
Brendan Lesniak
3/20/2014
您的 Leaf 类将需要一个方法toString()
0赞
Juned Ahsan
3/20/2014
@FlenMK在这里再次使用它。使用 System.out.println(“i = ” + this.i);
0赞
cHao
3/20/2014
@FlenMK:因为值不是变量。该对象可以同时拥有数万亿个不同名称中的任何一个(给定足够的内存来运行这么大的程序)。它不知道你用哪个名字来称呼它。
0赞
developerwjk
3/20/2014
x 仅存在于 main 函数中,而 i 是该类的成员。您需要阅读范围。
0赞
developerwjk
3/20/2014
#2
this
表示从中调用该方法的类的实例。因此,return 意味着返回该类的这个实例。因此,正如返回类型所示,increment() 方法返回 a 并且返回调用 increment() 方法的实例。this
Leaf
这就是为什么您可以致电:
x.increment().increment().increment().print();
因为每次调用你都会得到另一个 Leaf,你可以再次调用 Leaf 中的所有方法。.increment()
0赞
Brendan Lesniak
3/20/2014
#3
this
是引用当前实例的关键字。当你用它创建你的第一个实例时,它会创建一个单一的实例Leaf
Leaf
Leaf leaf = new Leaf ()
Leaf
从表面上看,您将返回正在调用的实例Leaf
increment()
0赞
fastcodejava
3/20/2014
#4
return this;
返回它所操作的类的实例。因此,每次调用 is 都会返回相同的实例,然后再次调用。您可以继续拨打:increment()
increment
increment()
x.increment().increment().increment().increment().increment().increment()...
评论
1赞
blekione
3/20/2014
所以这就像我会写方法一样,而不是上面?increment
void increment() {i++}
main()
x.increment; x.increment;...
评论
this
始终引用当前实例。例如,您可以写 而不是 in .this.i
i
increment()
this
this