在引用实例的字段时,如何知道是否使用“this”?
例如:
return this.name
我被教了一个有用的案例。即当输入参数与字段名称相同时:
public void setName(String name) {
this.name = name;
}
除此之外,“这个”似乎不需要..还有什么其他案例?
答案 0 :(得分:6)
如果某个类的构造函数太多,可以使用 this 来调用其他构造函数。 示例:
public class TeleScopePattern {
private final int servingSize;
private final int servings;
private final int calories;
private final int fat;
public TeleScopePattern(int servingSize, int servings) {
this(servingSize, servings, 0);
}
public TeleScopePattern(int servingSize, int servings, int calories) {
this(servingSize, servings, calories, 0);
}
public TeleScopePattern(int servingSize, int servings, int calories, int fat) {
this.servingSize = servingSize;
this.servings = servings;
this.calories = calories;
this.fat = fat;
}
}
答案 1 :(得分:5)
在少数情况下你必须使用它:
如果您具有相同的字段名称和方法参数/局部变量,并且您想要读/写字段
当您想要从内部类访问外部类的字段时:
class Outer {
private String foo;
class Inner {
public void bar() {
System.out.println(Outer.this.foo);
}
}
}
this(arg1, arg2);
所有其他用法只是风格问题。
答案 2 :(得分:2)
除了这种情况(这很常见,很难,我更喜欢将变量和参数命名为不同,以便我可以更好地区分它们),并将其用作构造函数,还有另一种情况。
有些想要将实例化的对象传递给方法。在这种情况下,您将此作为接收该实例的类的方法的参数。例如,使用辅助类进行增量的方法:
public class MyClass {
private Integer value = 0; //Assume this has setters and getters
public void incrementValue() {
Incrementer.addOne(this);
}
}
增量器类有一个像这样的方法:
public static void addOne(MyClass classToIncrement) {
Integer currentValue = classToIncrement.getValue();
currentValue++;
classToIncrement.setValue(currentValue);
}
有关详情,请查看the documentation。
答案 3 :(得分:2)
Fluent Interface pattern本质上意味着从“setter”方法返回this
,允许您“链接”方法调用。
StringBuilder
是JDK中具有流畅界面的一个示例。以下是它的工作原理:
int count = 5;
StringBuilder sb = new StringBuilder();
String result = sb.append("The total is ").append(count).append(".").toString();
上面的最后一行相当于:
sb.append("The total is ");
sb.append(count);
sb.append(".");
String result = sb.toString();
但会产生更少,更可读的代码。
各种append()
方法的实现都返回this
。
答案 4 :(得分:1)
在大多数情况下,当引用类中的方法或属性时,这是不必要的。然而,它通过明确变量存储在类范围而不是函数范围中来提高可读性。
答案 5 :(得分:0)
“在实例方法或构造函数中,this
是对当前对象的引用 - 正在调用其方法或构造函数的对象。您可以在实例方法中引用当前对象的任何成员或使用this
构造函数。“
答案 6 :(得分:0)
我不知道是谁以这种方式教你,但据我所知,这个是对当前对象的尊重。
returnType method(dataType val){
dataType myVariable = someOperation(this.val);
return myVariable;
}
docs.oracle.com详细说明了这一点。