【问题标题】:Am I using the 'this' keyword properly in my code?我是否在代码中正确使用了“this”关键字?
【发布时间】:2017-12-02 20:32:38
【问题描述】:

我正在寻找有关 this 关键字的指导。我刚刚了解了这个概念,这让我有点困惑。这是我的一段代码:

public class CashRegister {
    private ArrayList<Double> items;
    private int itemCount;
    private double totalPrice;

        public double getTotal() {
            this.totalPrice = 0;
            for (int i = 0; i < this.items.size(); i++) {
                this.totalPrice = this.totalPrice + this.items.get(i);
            }
            return totalPrice;
        }
    }

我的问题是我是否使用“this”对吗?每次使用totalPriceitems ArrayList 之类的变量时,我应该使用“this”吗?

【问题讨论】:

  • 我不会。这是多余的,任何了解该语言的人都知道totalPrice 指的是实例字段。
  • 在这种情况下,它们不是必需的。当有可能发生冲突时使用关键字。这里,在 getTotal() 中引用的唯一对象是用来调用它的对象。因此,关于我使用哪个对象的属性的引用没有冲突。
  • 我喜欢。对我来说,这是防止冲突的一种方式。另一种方法是根本不创建名称冲突。例如,给您的成员一个前缀,如mTotalPrice(如其他语言中的_totalPrice)。如果您使用 IDE,您可能可以设置一些高级规则,以便在您忘记使用 this 或创建此类名称冲突时发出警告(至少 Eclipse 有这个)。
  • 如果你在访问器方法中实际计算总数,为什么要将totalPrice存储为字段?

标签: java arraylist syntax this


【解决方案1】:

没有错。但它污染了代码,因为它是多余的。我们都知道itemstotalPrice是当前对象(被this引用)的字段。

这是一段代码,其中this 有意义:

public class Test {
    private String test;

    public Test(String test) {
        this.test = test;
    }
}

您可能会看到对test 的引用不明确。在构造函数内部,如果您只使用test,您将不知道您访问的是Test 类型对象的字段还是传递给构造函数的引用String,在这种情况下,您将访问参考。所以this 用于确保您使用的是Test 类型的对象的字段。

有一个概念叫做shadowing。使用this 有助于避免陷入这样的陷阱,即认为自己引用了某些东西,而实际上却没有。

这个问题很有帮助: What is variable shadowing used for in a Java class?

【讨论】:

  • @WizKid22 其实就是Test类的定义。如果您像 Test t1 = new Test("abc") 一样实例化它。那么 t1 将是一个 Test 类型的对象。将类视为蓝图,将对象视为实际建筑物。
【解决方案2】:

你使用this的方式绝对没有错,只是多余。您可以在没有thises 的情况下编写相同的代码并获得相同的结果。

【讨论】:

    【解决方案3】:

    通常,“this”最常见的用法是在对象构造函数中。所以你可以有一些像......

    public NewThing(int count, double price) {
        this.count = count;
        this.price = price;
    }
    

    因此,它主要用于标识您正在为其分配要传入的参数的对象。因为变量名称与参数相同,“this”表示它是“this object”接收这些属性.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 2014-07-19
      • 2017-06-03
      • 1970-01-01
      相关资源
      最近更新 更多