如果你有一个带有一些普通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());
}
}
Run Code Online (Sandbox Code Playgroud) 在Eclipse中生成setter和getter时,其中一个选项是使用类中的getter和setter而不是直接访问类成员.这种级别的内部封装是否有用,或者它是一个好主意,一步到位?
我已经看到这两种方法都被使用过,但是从来没有听说过任何一种方式因为任何特殊原因而优先于其他方式.
public String toString() {
return this.field1 + " " + this.field2;
}
Run Code Online (Sandbox Code Playgroud)
与
public String toString() {
return getField1() + " " + getField2();
}
Run Code Online (Sandbox Code Playgroud)
我在我的例子中使用String连接来保持代码简洁.
通常,在我自己的项目中,我使用getter和setter进行任何字段访问,然后我按照我的工作做同样的事情.前段时间,我们项目的技术负责人问我为什么这样做,为什么这比仅仅使用字段本身更好(如果需要通过子类访问,可以选择声明它们受保护).我无法得出一个明确的答案.
那么,是否有任何理由在类的自己的字段中使用getter和setter,或者直接使用字段是否更好?
请考虑以下代码:
class Dog
attr_accessor :name, :color
def initialize(name, color)
end
end
Run Code Online (Sandbox Code Playgroud)
在Ruby对象中,是直接访问实例变量(即@name = name)还是使用setter/getter方法(即name = name)的约定?
前者对我来说更清楚,但如果你实现自己的setter/getter方法(例如同时增加一个类变量),那么你最终必须使用两种方法(即@name = name ; color = color).
Ruby社区中的惯例是什么?我应该如何编写代码以便将其他人阅读?