【问题标题】:Purpose of getters and setters? [duplicate]getter 和 setter 的目的? [复制]
【发布时间】:2011-03-03 10:08:57
【问题描述】:

可能的重复:
Public Data members vs Getters, Setters
Purpose of private members in a class

当您可以公开您的变量并避免像A.setVariableX(A.getVariableY()) 这样的行的麻烦时,getter 和 setter 有什么用?

【问题讨论】:

  • 正如你所知,我最初在我的程序中实现了 getter 和 setter,就像更改或检索变量的简单(和当时的 imo,无用)函数一样,但事实证明它们是生活 -调试期间抛出异常的保护程序。如果它们是公开的,我看不出调试会多么容易:)

标签: oop getter-setter


【解决方案1】:

Setter 和 getter 适用于属性,无论您的代码中有什么“属性”。

例如,您可以有一个angle 变量,它存储以弧度表示的角度值。然后,您可以使用您认为相关的任何角度单位为此变量定义 setter 和 getter。

【讨论】:

    【解决方案2】:

    因为有时对于您的变量可能存在一些限制,并且必须在设置它时检查它是否有意义。

    例如,如果你的 Age 不允许为 -1,你可以在你的 setter 中检查。

    if(value >= 0)
    {
       _age = value;
    }
    else
    {
      throw new InvalidAgeException("Age may not be less than 0");
    }
    

    【讨论】:

      【解决方案3】:

      Getter 和 setter 可以进行验证和惰性实例化,而公共成员则不能。

      顺便说一句,这与语言无关,因为大多数实现属性的语言都将实现抽象化,因此它们看起来像代码中的公共成员。

      【讨论】:

      • 奇怪的是,99% 的 setter/getter 并不用于验证或延迟初始化...尽管 Java 是关于它们的...看看 Pojo beans...这是真的在 IDE 的帮助下,他们根本不会打扰开发人员,但仍然......它与反射无关......唯一与之相关的是代理,它需要 setter/getter
      【解决方案4】:

      这是封装原则的一部分。您可以使用 setter 和 getter 作为与对象交互的接口,这样您就可以 - 例如 - 稍后添加任何功能(如验证输入数据)而无需接触使用类的代码。

      【讨论】:

        【解决方案5】:

        隐藏实现细节。如果您选择公开您的属性,然后决定更改它们的工作方式,您必须更改所有相关代码。

        使用 getter 和 setter,您通常可以在不更改可见 API 的情况下更改内部实现细节(从而避免更改使用相关类 API 的任何代码)。

        【讨论】:

          猜你喜欢
          • 2014-03-19
          • 2020-06-14
          • 2016-11-09
          • 1970-01-01
          • 2014-12-20
          • 1970-01-01
          • 2015-02-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多