您实际上不需要在 Java 中编写“this”关键字。但是这样做更好吗?使您的风格同质化是否有意义,即如果您使用“this”一次,则每次暗示它时都使用它?或者是否有一个地方你会一直使用它而其他地方你从不使用它?
4 回答
一般的共识是,您应该this
只在必要时使用,而不是在任何其他时间使用。
private String param;
public Construct(String param) {
// Usually the only place you need to use this.
this.param = param;
}
// A less common use of this
public Function() {
synchronized(this) {
// Some synchronized stuff.
}
}
作为一项规则,我倾向于不使用它——如果你可以减少冗余代码那就更好了。
但是,我可以想到三个无法避免 this 关键字的地方:
构造函数(委托给同一类中的另一个构造函数)
public MyClass() { this("Default Parameter");
在当前对象上同步
synchronized(this) {
将当前对象传递给另一个类
public void methodOne() { anotherClass.doSomething(this);
您有时在字段名称与参数相同的构造函数中需要它,但这并不是强制性的,因为您可以简单地重命名参数:
public MyClass(String data) {
this.data = data
除了这些,我想不出太多其他我会使用this
关键字的场景。我已经看到它被过度使用(在每个方法和字段引用上),这会使代码非常难以阅读。
仅在必要时使用它,或者当您认为它可以提高代码可读性时。
作为一般规则,您应该避免出现多余的语法。你会读到很多相反的观点,主要是指一个完全神话般的程序员,他不知道成员变量,不知道括号的用途,也不记得他在第三节教过的运算符优先规则年级。40年来我从未见过他。假设他将(a)不理解它并(b)因此破坏它,这不足以证明为他毁容您的代码是合理的。我从来没有见过这种情况发生。
我看到的是这样一个人制作的代码。这不是为他简化您自己的代码的理由。有人实际上错误地重写了我的一段代码的情况恰好有两次:一次是在 1979 年,有人重构了一个语法以删除运算符优先级,这很愚蠢,他不应该这样做它,还有一次是在 1992 年左右,但在这两种情况下,我都无法编写可以阻止它的语法或代码。
代码中有一些地方不能跳过this
关键字,例如 setter:
public void setValue(String value) {
this.value = value;
}
但如果可能的话,最好跳过:
public String getValue() {
return value;
}