[英]Using a getter without a setter
这似乎是一个已经问过的问题,但我找不到以这种特定方式提出的问题。 我不明白添加setter如何改进此代码。 我知道添加setter是标准做法,但我不明白为什么。
public class DataHelper extends Activity {
private final double cards = 52;
public double getCards(){
return cards;
}
由于cards
是final
,在这里添加一个setter是没有意义的:这个字段不能改变。
如果它不是final
,但你不想允许外部修改,那么添加setter将毫无意义。
如果在您的设计中有意义,则只需添加一个setter,以允许对字段进行外部修改。
至于为什么添加一个setter而不是直接修改一个字段的问题,答案就是封装。 通过仅通过方法提供访问权限,您可以在不影响用户的情况下更改基础实现。
一个更好的例子是Font
类。 字体的一个共同特征是大小可以是像素或点。 如果内部表示以点为单位,并将其作为字段公开,那么稍后如果需要将内部表示更改为像素,则不能影响所有当前用户。 相反,如果您提供了一个setter,那么您可以自由地更改内部表示而不会影响任何人。
提供方法而不是直接访问字段会使选项打开,以便稍后修改类的内部,而不会影响用户。 这是很好的封装,信息隐藏。
如果您的类将在不需要setter的环境中使用(例如ORM /依赖注入/序列化框架),那么不使用setter就可以了。 在这种特殊情况下,setter没有多大意义,因为变量是final,只设置一次。 因此,使用卡片方法获取私有变量的值并不是一个坏主意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.