为什么更喜欢变量的getter和setter方法而不是公开?

时间:2011-02-07 11:46:25

标签: java oop

  

可能重复:
  Why use getters and setters?

是的,这是一件非常简单的事情,但我并没有找到一个好的共鸣。我知道将变量设为私有并向setter提供getter来访问该变量是一个好习惯。除此之外还有什么理由吗?

4 个答案:

答案 0 :(得分:4)

查找“封装”和“信息隐藏”。

基本上,类管理数据并提供对它们的操作/提供对它们的访问,但该数据的内部表示应保持对类的私有。像这样,类可以在不破坏其他代码的情况下更改其内部表示。

E.g。考虑:

A)

    public Date date;

B)

    private Date date;


    public Date getDate(){...}
    public setDate(Date date){...}

稍后您选择使用日历而不是日期。 在情况A)中,您无法在不破坏代码的情况下更改数据类型。

如果是B)你可以这样做:

    private Calendar calendar;


    public Date getDate(){...}
    public setDate(Date date){...}
    public Calendar getCalendar (){...}
    public setCalendar(Calendar calendar){...}

您可以在get / setDate方法中提供转换。客户端代码不会中断。

您有时想要使用getter和setter的另一个原因是使用libraries /

基于JavaBeans模式的框架。

答案 1 :(得分:1)

原因很多。它是一种控制类的内部工作的访问(访问器)的方法。有时,例如,您可能希望getter返回对象或setter的克隆,只是复制私有对象上的值,而不是将处理程序指向传递给setter的新对象。另一个原因是在获取或设置对象之前或之后做某事而不暴露此功能。

总结一下:

  1. 您为将来的扩展留出空间
  2. 你关闭了不受控制的访问之门
  3. 仅在需要时使用它们。

答案 2 :(得分:0)

  • 如果实际需要,只提供getter / setter,不要自动执行
  • getter / setter隐藏了内部实现,理论上为您提供了一个定义良好的界面,允许您更改内部实现,而无需客户端更改其代码

答案 3 :(得分:0)

如果保留变量public,则无法确保对象保持一致状态。例如,在您的安装工中,您可以进行一些检查,例如避免将负数设为年龄。

如果你有公共变量,你可以放弃例如拥有监听器的可能性,因为监听器通常使用通过setter设置变量的通知。直接更改公共变量时,没有机会跟踪更改。

这些是一些非常基本的例子,但可以肯定地找到它们。