如果您的类具有一些简单的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());
}
}
Java程序员通常在使用getter方法方面往往非常一致。我编程多种语言,但我不太一致;)
我想说的是,只要您不要做一个吸气剂,就可以将原始变量用于私有变量。当您做吸气剂时,应该只使用它。当我为私有字段创建getter时,我的IDE建议我在引入getter时自动为我替换原始字段访问。切换到使用吸气剂的操作仅需几次按键(并且没有机会引入错误),因此我倾向于将其推迟到需要时才使用。
当然,如果要使用getter-injection之类的东西,某些类型的代理和子类化的framworks(例如休眠),则必须使用getters!
[使用getter,您不会意外地修改变量:)此外,如果同时使用getter和“ raw”变量,您的代码可能会感到困惑。
此外,如果您使用继承并在子类中重新定义getter方法,则使用getter的方法将正常工作,而使用raw变量的方法将无法正常工作。
[如果您到处都使用getter方法-将来在getMessageId()的所有调用上执行代码搜索,您将找到所有这些,而如果您使用了私有的,则可能会错过一些。
此外,如果在setter方法中引入了逻辑,则不必担心更改多个位置。
如果要分配给属性的值是已知值或已验证的值,则可以安全地直接使用私有变量。 (也许在某些特殊情况下,很明显为什么这样做会很糟糕。)是否这样做更取决于口味或风格。这也不是性能问题,因为如果足够简单,则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;
}
}
如果使用吸气剂,您将确保在对它应用任何逻辑/决定后都会得到该值。这可能不是您的典型情况,但是当您遇到这种情况时,您将为此感到感谢。
除非我有一个特定的用例,可以直接在封闭的类中使用内部字段,否则我一直认为,使用与公开访问相同的方式来使用该字段很重要。如果需要通过getter方法或属性在字段中添加一些后处理,这可以确保整个返回值的一致性。如果您出于某种原因想要它的原始值,我觉得访问原始字段是完全可以的。