如果我不需要进行任何检查(在吸气期间)或更新其他东西(在制定者中),那么拥有一个简单的公共成员变量就足够了吗?
答案 0 :(得分:3)
只要有可能,你应该避免使用setter,甚至在处理引用时使用getter。除非由于某些特殊原因无法做到,否则应始终优先选择不变性。在Java中,我个人更喜欢有吸气剂,即使我没有在那里做任何检查,它只是给了一点控制。
答案 1 :(得分:1)
如果您不需要检查价值或更新价值,请将其设为私有,并且不提供任何其他访问权限。
我个人的理念是只在需要时公开访问功能,然后,不一定提供设置和成对,甚至。
当您需要对传入值进行安全检查或在何种条件下读取变量时,getter和setter都很好。
当你有一个带有大量原语的简单对象时,它们很糟糕,只需要将一个地方捆绑在一起。在那些情况下,我更喜欢公共成员。
答案 2 :(得分:1)
请注意,在scala中,此问题不存在,因为scala会为您自动生成getter和setter方法:
class Person(var name: String)
val p = new Person("Jonh")
p.name = "James"
println(p.name) // James
然后,如果您需要覆盖默认的默认访问者和更改者:
class Person(private var _name: String) {
def name = _name
def name_=(aName: String) { _name = aName }
}
仍然有效:
val p2 = new Person2("Jonh")
p.name = "James"
println(p.name) // James
This answer对其他语言(C#,Python,...)中的类似(非等效)概念进行了解释,其中您可以拥有property
:一对方法(getter和/或者是一个二传手。)
正如艾略特指出的那样,当你在课堂上有不变性时,制定者就没有意义了。甚至在像Java这样的语言中,你可以编写一个getter,但我可以说你通常可以使用final public
属性,因为你可以通过构造函数改变它们的值,尽管我不会把它称为“Java方式” “(笑):
class Person {
public final int age;
public Person(int theage) {
// Let's transforme age here
// Imagine this could would go in the getter
age = theage * 2;
}
}
答案 3 :(得分:0)
如果你做的事情很简单,那么公开是最实际的。
正如Jameson所提到的,有时你只需要getter或者只需要setter(String.getCharAt()等等......)。
如果你正在做一个大项目,你应该至少进行安全检查(詹姆森再次)。此外,它会让你看起来很聪明,在正确的地方使用它们,但这真的取决于你做什么,分享一段代码可能吗?