这似乎是一个已经问过的问题,但我找不到以这种特定方式提出的问题.我不明白添加setter如何改进此代码.我知道添加setter是标准做法,但我不明白为什么.
public class DataHelper extends Activity {
private final double cards = 52;
public double getCards(){
return cards;
}
Run Code Online (Sandbox Code Playgroud)
因为cards就是final在这里添加一个设置是没有意义的:这个字段不能改变.
如果不是final,但你不想允许外部修改,那么添加setter将毫无意义.
如果在您的设计中有意义,则只需添加一个setter,以允许对字段进行外部修改.
至于为什么添加一个setter而不是直接修改一个字段的问题,答案就是封装.通过仅通过方法提供访问权限,您可以在不影响用户的情况下更改基础实现.
一个更好的例子是一个Font类.字体的一个共同特征是大小可以是像素或点.如果内部表示以点为单位,并将其作为字段公开,那么稍后如果需要将内部表示更改为像素,则不能在不影响所有当前用户的情况下进行.相反,如果您提供了一个setter,那么您可以自由地更改内部表示而不会影响任何人.
提供方法而不是直接访问字段会使选项打开,以便稍后修改类的内部,而不会影响用户.这是很好的封装,信息隐藏.
| 归档时间: |
|
| 查看次数: |
1290 次 |
| 最近记录: |