2012-07-25 124 views

回答

5

因为,

验证是一个原因。将字段名称保留在公共API之外还允许您在不中断API的情况下稍后对其进行更改。并且它允许您稍后以其他方式改变课程,例如将领域移动到其他类(这样公共二传手可以在另一个类中调用一个setter)。调用setter也可以让你做其他事情,例如通知感兴趣的其他组件的价值变化。如果直接访问该字段,这些都不可能。

+0

还有像封装,类型转换这样的OOP设计模式都很重要。如果您阅读了基本的OOP设计概念,那么很好理解面向对象编程结构的工作原理。 – user370305 2012-07-25 06:45:55

2

他们更倾向于将来验证代码。将来如果您想消除变量或使用另一个变量来推导出这个变量值 - 则变化更简单。你只需要改变getter/setter,其余的代码不受影响。直接访问变量不是这种情况。

0

其简单..如果你让这些变量公开,那么你给予他们任何价值的权利。 但是,如果你是通过getter和setter方法......你可以把在它的检查和控制输入或转换,无需让最终用户知道

如:

getName(){ 
    return firstName+lastName; 
} 

getData(){ 
    // code to convert byte to Mb or whatever you like to represent 
} 
1

由于@ user370305已经提到了一个原因是验证。 其他原因是类型转换。 Setter可能接受字符串并将其解析为整数。另一个原因是数据封装。并不一定要在同一个班级中存储简单的文件。类Person的方法setName(String)可以将该名称存储在更复杂的数据结构中。使用简单字段不允许您更改类Person的内部实现,而不影响使用它的代码。编辑: 又一个技术原因。 用getter和setter来发现和调试代码要容易得多。如果某些字段意外更改,您可以将中断点切换到适当的setter中,并快速找到问题。如果这个字段是公开的,并且你有1000个这个字段的引用,那么理论上你必须在所有这些地方放置1000个断点。

0

使用accessors限制对字段变量的直接访问优于使用public fields,但是,使getters and setter for each and every field is overkill被认为是不好的做法。它也取决于情况,有时候你只是想要一个愚蠢的数据对象。应该添加Accessors以用于真正需要的字段。看到这个链接了解更多关于它Getter Setter: To Use or Not to Use

1

1.Encapsulation在不同的上下文中不同的使用,在其design patterns行为,不断变化的需求在抽象类或接口被封装。

2.private instance variablepublic 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()); 
-1

我找不到具有一个getter和什么也不做,而是直接一个setter一个私有变量背后的逻辑原因处理该值优于具有公共变量。

考虑到你放入getter和setter的任何附加代码增加了复杂性,也需要测试。对于完全由您控制的小型系统,使用吸气和吸气装置可能没有什么益处。使用你的专业判断。你可能不需要将来的证明,并增加了复杂性。或者直接访问的效率和简单性对您来说可能更重要。

就我个人而言,我认为getters和setters是过度使用。对于完全由您控制的小型系统,直接访问可能是一条路。

相关问题