为什么鼓励使用处理程序的私有变量?

时间:2012-07-25 06:34:11

标签: java android theory

  

可能重复:
  Are Getters and Setters evil?

我找不到一个带有getter和setter的私有变量的逻辑原因,除了直接处理优于拥有公共变量的值之外什么都不做。

我错过了什么吗?

7 个答案:

答案 0 :(得分:5)

由于,

验证是一个原因。将字段名称保留在公共API之外还允许您稍后更改它而不会破坏API。它允许您稍后以其他方式更改课程,例如将字段移动到其他类(以便公共setter将在不同的类中调用setter)。调用setter也允许你做其他事情,例如通知感兴趣的其他组件的价值变化。如果直接访问该字段,这一切都不可能。

答案 1 :(得分:2)

他们更愿意将来证明代码。将来如果要消除变量或使用另一个变量来获取此变量值 - 更改会更简单。您只需更改getter / setter,其余代码不受影响。直接访问变量不是这种情况。

答案 2 :(得分:1)

正如@ user370305已经提到的一个原因是验证。 其他原因是类型转换。 Setter可以接受字符串并将其解析为整数。 另一个原因是数据封装。不一定要将简单的字段存储在同一个类中。类setName(String)的方法Person可以将名称存储在更复杂的数据结构中。使用简单字段不允许您更改类Person的内部实现,而不会影响使用它的代码。

编辑: 还有另一个技术原因。 使用getter和setter更容易发现和调试代码。如果某些字段意外更改,您只需将断点切换到适当的设置器并快速找到问题。如果此字段是公共的,并且您有1000个对此字段的引用,则理论上必须在所有这些位置放置1000个断点。

答案 3 :(得分:1)

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

2。private instance variablepublic getter setter为b

3。主要完成验证用户的输入 ...直接将值设置为实例变量是危险的。

<强>例如

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());

答案 4 :(得分:0)

简单..如果你将这些变量设为公开,那么你就可以给予任何值的权利。 但是如果你通过getter或setter这样做...你可以对它进行检查并控制输入或转换而不让最终用户知道

例如:

getName(){
  return firstName+lastName;
}

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

答案 5 :(得分:0)

使用accessors来限制对字段变量的直接访问比使用public fields更受欢迎,但是,getters and setter for each and every field is overkill并认为这不是一个好习惯。它也取决于情况,有时你只想要一个愚蠢的数据对象。应该为真正需要的字段添加Accessors。请参阅此链接以了解有关它的更多信息Getter Setter: To Use or Not to Use

答案 6 :(得分:-1)

  

我找不到一个带有getter和setter的私有变量的逻辑原因,除了直接处理优于拥有公共变量的值之外什么都不做。

考虑到您在getter和setter中添加的任何其他代码都会增加复杂性并且还需要进行测试。对于完全由您控制的小型系统,使用吸气剂和定位器可能没什么好处。用你的专业判断。您可能不需要将来进行校对并增加复杂性。或者,让您获得直接访问的效率和简单性可能更为重要。

就个人而言,我认为吸气剂和制定者过度使用。对于完全由您控制的小型系统,可以直接访问。