在Java中,有没有关于何时使用每个访问修饰符,即默认明确的规则(包私有)public,protected并且private,同时使class与interface和处理继承?
在Java类中,使用getter和setter访问成员字段是不是很好或者不好?
比如哪个更好:
public Order {
private Agreement agreement;
public Agreement getAgreement() {
return agreement;
}
public void process() {
//should I use:
getAgreement().doSomething();
//Or:
agreement.doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
一般来说,我认为直接访问该字段最好是由于KISS原则,并且有人可能会在以后使用不可预测的结果覆盖get方法.
然而,我的同事认为保留一层抽象更好.对此有何共识?
请考虑以下代码:
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社区中的惯例是什么?我应该如何编写代码以便将其他人阅读?