我有一天在SO上看到的答案(由@ ChssPly76编写)为什么使用getter和setter
因为从现在开始的2周(月,年),当您意识到设置者需要做的不仅仅是设置值时,您还将意识到该属性已直接在238个其他类中使用:-)
还有很多优点:
- getter和setter 可以 在其中 进行验证 ,而字段则不能
- 使用getter可以 获取 想要的类的 子 类。
- getter和setter 是多态的 ,字段不是
- 调试 可以简单得多,因为可以将断点放置在一个方法内,而不是该给定字段的许多引用附近。
- 他们可以 隐藏实现更改 :
之前:
private boolean alive = true;public boolean isAlive() { return alive; }public void setAlive(boolean alive) { this.alive = alive; }后:
private int hp; // change!public boolean isAlive() { return hp > 0; } // old signature //method looks the same, no change in client prepublic void setAlive(boolean alive) { this.hp = alive ? 100 : 0; }编辑 :当您使用Eclipse时,另一个新的优点-您可以在现场创建观察点,但是如果您有setter,则只需要一个断点,并且…
断点(例如,在setter方法中)可以是有条件的观察点(在现场)不能
。因此,如果仅在
x=10只能使用setter中的断点才能停止调试器的情况下才停止。



