这个问题困扰了我一段时间。是直接访问公共属性还是使用getter方法访问私有属性?哪一个更好/正确,为什么?
这个问题困扰了我一段时间。是直接访问公共属性还是使用getter方法访问私有属性?哪一个更好/正确,为什么?
使用getter(和可能的setter)的私有属性被认为是合适的风格,因为声明为public并直接使用会破坏封装原则。它可能会导致的问题之一是,您直接依赖于字段的实现类型,如果以后需要更改,则更难。
此外,getter/setter允许您向访问和修改过程添加逻辑。您可以执行边界检查、输入验证、将null替换为默认值等操作...
然而,在许多情况下,例如大多数JavaBeans用法,getter/setter仅做您直接访问所需的工作。因此,在JavaBeans上下文中,这整个事情都是受争议的。
我的意见?整个问题被严重夸大了,它引发的讨论已经花费了足够的时间和键盘击键,创造了一个具有适当属性的全新Java语言规范。不要听信教条,做最适合您的事情,并始终思考什么是有意义的,什么是没有意义的。如果每个人都接受上述话语,我们可能仍然在汇编中编码。
始终将字段声明为私有。假设您有一个银行账户,您想取一些现金:
public class BankAccountWithprivateField
{
private Cash cash;
// ...
public void draw(int amount)
{
if(amount <= balance) cash.draw(amount);
else sentMessage("Sorry your balance is less than what you request!");
}
}
// ...
new BankAccountWithprivateField().draw(500);
在这里,您不能绘制超过您余额的金额。
public class BankAccountWithPublicField
{
public Cash cash;
// ...
}
// ...
new BankAccountWithPublicField().cash.draw(1000000);
但是在这里,你可以画一百万美元的图案 ;)
Days.SATURDAY
而不是 days.getSaturday()
。但是,如果该值附加到特定实例而不是类,或者可能会发生变化,或者通常不像必须是通用常量,那么由私有字段/公共getter提供的灵活性使其更可取。