在类方法中使用吸气剂

问题描述 投票:19回答:6

如果您的类具有一些简单的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());
    }
}
getter
6个回答
9
投票

Java程序员通常在使用getter方法方面往往非常一致。我编程多种语言,但我不太一致;)

我想说的是,只要您不要做一个吸气剂,就可以将原始变量用于私有变量。当您做吸气剂时,应该只使用它。当我为私有字段创建getter时,我的IDE建议我在引入getter时自动为我替换原始字段访问。切换到使用吸气剂的操作仅需几次按键(并且没有机会引入错误),因此我倾向于将其推迟到需要时才使用。

当然,如果要使用getter-injection之类的东西,某些类型的代理和子类化的framworks(例如休眠),则必须使用getters!


7
投票

[使用getter,您不会意外地修改变量:)此外,如果同时使用getter和“ raw”变量,您的代码可能会感到困惑。

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


3
投票

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

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


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;
   }

}

0
投票

如果使用吸气剂,您将确保在对它应用任何逻辑/决定后都会得到该值。这可能不是您的典型情况,但是当您遇到这种情况时,您将为此感到感谢。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.