【问题标题】:Necessity of access modifiers for instance field with set methods具有 set 方法的实例字段的访问修饰符的必要性
【发布时间】:2012-09-10 11:49:41
【问题描述】:

我正在学习java。现在,将类中的字段设为私有并根据访问或修改变量的要求提供 get 和 set 方法始终是 oop 中的一种做法。现在我的问题是,如果您有一个声明为私有的字段的 set 方法,即使该字段不可见,用户仍然可以更改该字段的值。那么,为什么不将字段公开而不提供 set 方法呢?

【问题讨论】:

    标签: java oop field


    【解决方案1】:

    将类中的字段设为私有并根据访问或修改变量的要求提供get和set方法始终是oop中的一种做法。

    最好将变量保密(尽管您可以将其公开)。并非所有变量都需要 get 和 set(访问器和修改器)函数。这取决于用例。例如,如果我持有类内部的某种计数,我不会为其提供 set(..) 方法。如果您的 get(..) 和 set(..) 方法只是返回和分配,我建议您遵循公司的编码指南。如果你可以选择 getter 和 setter。

    现在我的问题是,如果您有一个声明为私有的字段的 set 方法,那么即使该字段不可见,用户仍然可以更改该字段的值。那么,为什么不公开字段而不是提供 set 方法呢?

    这里有一个非常简单/琐碎的例子:

    void setVar(string x){
        myPrivateVar = x;
    
        //log the change..
        writeToLog("myPrivateVar was updated to: " + x + " at <blah blah>");
    
        //inform others of the change.
        updateDependantConfiguration();
    }
    

    HTH ..

    【讨论】:

      【解决方案2】:

      尝试阅读有关封装的内容,您会更好地理解其中的原因。

      【讨论】:

        【解决方案3】:

        您是对的 - setter 和 getter 可以更改适当属性的值。那么,我们为什么需要它们?

        我会在这里尝试列举一些原因。

        • 更容易维护代码。您可以轻松找到谁更改了属性。只需查找所有 settter 调用。否则,您可以搜索所有与财产相关的地方,并找到 99% 的地方是您阅读财产的地方,以及 1% 的地方是您写财产的地方。
        • 更容易调试。您可以根据需要在 getter 或 setter 中放置断点。
        • setter 和 getter 是方法这一事实用于现代复杂框架中的字节码工程和代理创建。

        【讨论】:

          猜你喜欢
          • 2014-09-08
          • 1970-01-01
          • 2015-11-27
          • 2014-06-26
          • 2015-10-06
          • 2014-03-06
          • 1970-01-01
          • 2015-12-24
          • 2022-11-18
          相关资源
          最近更新 更多