我不能找到具有与吸气私有变量和什么也不做二传手,而是直接办理值是最好的背后的逻辑原因有一个公共变量。
我错过了什么吗?
我不能找到具有与吸气私有变量和什么也不做二传手,而是直接办理值是最好的背后的逻辑原因有一个公共变量。
我错过了什么吗?
因为,
验证是一个原因。将字段名称保留在公共API之外还允许您在不中断API的情况下稍后对其进行更改。并且它允许您稍后以其他方式改变课程,例如将领域移动到其他类(这样公共二传手可以在另一个类中调用一个setter)。调用setter也可以让你做其他事情,例如通知感兴趣的其他组件的价值变化。如果直接访问该字段,这些都不可能。
还有像封装,类型转换这样的OOP设计模式都很重要。如果您阅读了基本的OOP设计概念,那么很好理解面向对象编程结构的工作原理。 – user370305 2012-07-25 06:45:55
他们更倾向于将来验证代码。将来如果您想消除变量或使用另一个变量来推导出这个变量值 - 则变化更简单。你只需要改变getter/setter,其余的代码不受影响。直接访问变量不是这种情况。
其简单..如果你让这些变量公开,那么你给予他们任何价值的权利。 但是,如果你是通过getter和setter方法......你可以把在它的检查和控制输入或转换,无需让最终用户知道
如:
getName(){
return firstName+lastName;
}
或
getData(){
// code to convert byte to Mb or whatever you like to represent
}
由于@ user370305已经提到了一个原因是验证。 其他原因是类型转换。 Setter可能接受字符串并将其解析为整数。另一个原因是数据封装。并不一定要在同一个班级中存储简单的文件。类Person
的方法setName(String)
可以将该名称存储在更复杂的数据结构中。使用简单字段不允许您更改类Person
的内部实现,而不影响使用它的代码。编辑: 又一个技术原因。 用getter和setter来发现和调试代码要容易得多。如果某些字段意外更改,您可以将中断点切换到适当的setter中,并快速找到问题。如果这个字段是公开的,并且你有1000个这个字段的引用,那么理论上你必须在所有这些地方放置1000个断点。
使用accessors
限制对字段变量的直接访问优于使用public fields
,但是,使getters and setter for each and every field is overkill
被认为是不好的做法。它也取决于情况,有时候你只是想要一个愚蠢的数据对象。应该添加Accessors
以用于真正需要的字段。看到这个链接了解更多关于它Getter Setter: To Use or Not to Use。
1.Encapsulation
在不同的上下文中不同的使用,在其design patterns
像行为,不断变化的需求在抽象类或接口被封装。
2.有private instance variable
和public getter setter
为b
其主要做验证从用户输入...的值设置为一个实例变量是直接的危险。
如:
int dogAge;
System.out.println("My dogs age is :"+dogAge);
现在,如果有人给出了否定的时代......那什么...... ???
所以我们必须做这样...
int dogAge;
public void setAge(int age){
if (age>0){
dogAge = age;
}
else{
System.out.println("Not a valid age");
}
}
public int getAge(){
return dogAge;
}
System.out.println("My dog age is :"+ getAge());
我找不到具有一个getter和什么也不做,而是直接一个setter一个私有变量背后的逻辑原因处理该值优于具有公共变量。
考虑到你放入getter和setter的任何附加代码增加了复杂性,也需要测试。对于完全由您控制的小型系统,使用吸气和吸气装置可能没有什么益处。使用你的专业判断。你可能不需要将来的证明,并增加了复杂性。或者直接访问的效率和简单性对您来说可能更重要。
就我个人而言,我认为getters和setters是过度使用。对于完全由您控制的小型系统,直接访问可能是一条路。
[这里](http://stackoverflow.com/questions/565095/are-getters-and-setters-evil)是在此许多许多职位上SO之一。 – Keppil 2012-07-25 06:38:04