在类方法中使用getter

时间:2009-03-10 05:32:32

标签: getter

如果你有一个带有一些普通的get / set属性的类,有没有理由在类方法中使用getter,或者你应该只使用私有成员变量?我认为可能会有更多关于setter的争论(验证逻辑?),但我想知道getter。

例如(在Java中) - 是否有任何理由使用选项2?:

public class Something
{
    private int messageId;
    public int getMessageId() { return this.messageId; }
    public void setMessage(int messageId) { this.messageId = messageId; }

    public void doSomething()
    {
        // Option 1:
        doSomethingWithMessageId(messageId);

        // Option 2:
        doSomethingWithMessageId(getMessageId());
    }
}

6 个答案:

答案 0 :(得分:9)

Java程序员通常对使用getter方法非常一致。我编写了多种语言,但我并不是那么一致;)

我会说只要你制作一个getter就可以使用原始变量 - 对于私有变量。当你做一个吸气剂时,你应该只使用它。当我为私有字段制作一个getter时,我的IDE建议在我引入getter时它会自动替换我的原始字段访问。切换到使用getter只需几次击键(并且没有任何引入错误的机会),所以我倾向于延迟它直到我需要它。

当然,如果你想要像getter-injection,某些类型的代理和子类化framworks,如hibernate,你必须使用getter!

答案 1 :(得分:7)

使用getter你不会意外地修改变量:)另外,如果你同时使用getter和“raw”变量,你的代码可能会混淆。

此外,如果您使用继承并重新定义子类中的getter方法,则使用getter的方法将正常工作,而使用原始变量的方法则不会。

答案 2 :(得分:3)

如果你到处使用getter方法 - 并且将来在getMessageId()的所有调用上执行代码搜索,你会找到所有这些,而如果你使用了私有,你可能会错过一些。

此外,如果在setter方法中引入了逻辑,那么您不必担心为它更改多个位置。

答案 3 :(得分:1)

如果要分配给属性的值是已知值或验证值,则可以安全地直接使用私有变量。 (除非在某些特殊情况下,很明显为什么这会很糟糕。)无论你做与否,更多的是品味或风格。这也不是性能问题,因为如果编译器内置的getter或setter很简单就会内联。

如果类未知该值,则应使用该属性进行设置,以便保护该属性不受非法值的影响。

这是一个例子(在C#中):

public class Something {

   private string _value;

   public string Value {
      get {
         return _value;
      }
      set {
         if (value == null) throw new ArgumentNullException();
         _value = value;
      }
   }

   public Something() {
      // using a known value
      _value = "undefined";
   }

   public Something(string initValue) {
      // using an unknown value
      Value = initValue;
   }

}

答案 4 :(得分:0)

如果您使用getter,那么您将确保在应用任何逻辑/决策后获得该值。这可能不是你的典型情况,但是当它出现时,你会为此感谢你。

答案 5 :(得分:0)

除非我有一个特定的用例,以直接在封闭的类中使用内部字段,否则我一直认为,使用与公开访问相同的方式来使用该字段很重要。如果需要通过getter方法或属性将一些后处理添加到字段中,这可以确保整个返回值的一致性。如果您出于某种原因想要原始值,我觉得最好访问原始字段。

通常,getter封装是简单明了的样板代码-您很可能不返回除字段值本身以外的任何内容。但是,在将来可能要更改数据呈现方式的情况下,则需要在内部进行较少的重构。