使方法访问类中的私有变量而不是使变量成为公共变量有什么好处吗?
例如,第二种情况比第一种情况好吗?
//Case 1 public class Shoe{ public int size; } //Case 2 public class Shoe{ private int size; public int getSize(){ return size; } public void setSize(int sz){ size = sz; } }
我有一天在SO上看到的答案(由@ ChssPly76编写)为什么使用getter和setter
因为从现在开始的2周(月,年),当您意识到设置者需要做的不仅仅是设置值时,您还将意识到该属性已直接在238个其他类中使用:-)
还有很多优点:
之前:
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 code public void setAlive(boolean alive) { this.hp = alive ? 100 : 0; }
编辑 :当您使用Eclipse时,另一个新的优点-您可以在现场创建观察点,但是如果您有setter,则只需要一个断点,并且… 断点(例如,在setter方法中)可以是有条件的观察点(在现场)不能 。因此,如果仅在x=10只能使用setter中的断点才能停止调试器的情况下才停止。
x=10