9

您实际上不需要在 Java 中编写“this”关键字。但是这样做更好吗?使您的风格同质化是否有意义,即如果您使用“this”一次,则每次暗示它时都使用它?或者是否有一个地方你会一直使用它而其他地方你从不使用它?

4

4 回答 4

20

一般的共识是,您应该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.
  }
}
于 2013-02-18T09:08:25.177 回答
6

作为一项规则,我倾向于不使用它——如果你可以减少冗余代码那就更好了。

但是,我可以想到三个无法避免 this 关键字的地方:

  • 构造函数(委托给同一类中的另一个构造函数)

    public MyClass() {
        this("Default Parameter");
    
  • 在当前对象上同步

    synchronized(this) {

  • 将当前对象传递给另一个类

    public void methodOne() {
        anotherClass.doSomething(this);
    

您有时在字段名称与参数相同的构造函数中需要它,但这并不是强制性的,因为您可以简单地重命名参数:

public MyClass(String data) {
    this.data = data

除了这些,我想不出太多其他我会使用this关键字的场景。我已经看到它被过度使用(在每个方法和字段引用上),这会使代码非常难以阅读。

仅在必要时使用它,或者当您认为它可以提高代码可读性时。

于 2013-02-18T09:37:51.823 回答
4

作为一般规则,您应该避免出现多余的语法。你会读到很多相反的观点,主要是指一个完全神话般的程序员,他不知道成员变量,不知道括号的用途,也不记得他在第三节教过的运算符优先规则年级。40年来我从未见过他。假设他将(a)不理解它并(b)因此破坏它,这不足以证明为他毁容您的代码是合理的。我从来没有见过这种情况发生。

看到的是这样一个人制作的代码。这不是为他简化您自己的代码的理由。有人实际上错误地重写了我的一段代码的情况恰好有两次:一次是在 1979 年,有人重构了一个语法以删除运算符优先级,这很愚蠢,他不应该这样做它,还有一次是在 1992 年左右,但在这两种情况下,我都无法编写可以阻止它的语法或代码。

于 2013-02-18T09:14:25.513 回答
2

代码中有一些地方不能跳过this关键字,例如 setter:

public void setValue(String value) {
    this.value = value;
}

但如果可能的话,最好跳过:

public String getValue() {
    return value;
}
于 2013-02-18T09:10:36.780 回答