【问题标题】:What's the proper way to access fields from methods从方法访问字段的正确方法是什么
【发布时间】:2012-04-11 11:40:08
【问题描述】:

我想通过方法访问类中的 StringBuilder 字段。字段和方法都是非静态的。我已经尝试了很多方法,无论我用哪种方法,这一切似乎都有效,但我只是想知道正确的方法是什么。这是我的意思的一个例子:

public class ExampleClass {
    private StringBuilder sb = new StringBuilder();
    private void call() {
        sb.append("Test"); // I can do it this way
        this.sb.append("Second way"); // or this way
        // does it matter? can someone explain it to me?
    }
    public static void main(String[] args) {
        ExampleClass ec = new ExampleClass();
        ec.call();
    }
}

我只是不明白这一点。我可能只是个白痴,但访问该字段的正确方法是什么?

非常感谢,

保罗

【问题讨论】:

    标签: java class methods private field


    【解决方案1】:

    这两者是有区别的

    sb.append("Test"); // I can do it this way
    this.sb.append("Second way"); // or this way
    

    仅当您在该上下文中有一些其他变量也称为sb

    例如:

    public class ExampleClass {
        private StringBuilder sb = new StringBuilder();
        private void call(StringBuilder sb) {
            sb.append("Test"); //refers to the parameter passed to the function
            this.sb.append("Second way"); //refers to your member
        }
        public static void main(String[] args) {
            ExampleClass ec = new ExampleClass();
            StringBuilder sb = new StringBuilder();
            ec.call(sb);
        }
    }
    

    【讨论】:

      【解决方案2】:

      在您的示例中,sbthis.sb 指的是同一个对象,这是 ExampleClass 的实例的字段。您可以使用其中任何一个。

      在您的情况下,我只会使用sb,因为没有歧义。在以下情况下使用this 很有用:

      public void setBuilder(StringBuilder sb) {
          this.sb = sb;
      }
      

      this.sb 是您的类字段,sbsetBuilder 方法的参数。

      【讨论】:

        【解决方案3】:

        没有“正确的方法”可以做到这一点。我宁愿不使用this,除非它不明确,因为在 IDE 中,该字段为我突出显示,所以我可以看到它正在解析为一个字段。此外,太多的this 使代码混乱。许多其他人更喜欢添加this,因为这样读者就不会产生歧义。

        【讨论】:

          【解决方案4】:

          我不确定这种情况是否有标准。

          基本上“this”是隐含的,在您的情况下没有歧义(如果您有同名的参数,或者超类中的受保护/公共字段)。

          我通常使用“this”,但这是个人喜好问题,我发现访问类参数时更容易快速查看。

          【讨论】:

            【解决方案5】:

            两者本质上都在做同样的事情。在这种情况下使用 this 是多余的。

            【讨论】:

              猜你喜欢
              • 2011-07-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-06-14
              • 2015-01-20
              • 1970-01-01
              • 2015-12-08
              相关资源
              最近更新 更多