【问题标题】:java - public access vs accessor methods [duplicate]java - 公共访问与访问器方法[重复]
【发布时间】:2012-06-02 08:05:49
【问题描述】:

可能重复:
Why use getters and setters?

我正在阅读 Java for Dummies 第 2 版,它说最好为类的变量定义访问器方法,而不是使它们成为 public。这是真的吗?

【问题讨论】:

标签: java encapsulation


【解决方案1】:

是的。

定义访问器方法使您具有更大的灵活性。例如,您可以使其publicly 可读,但仅privately 可写。

Here's a Skeet answer to this particular question。他建议始终将您的字段设为私有

【讨论】:

  • 所以java没有readonly
  • 否,但定义公共读取器方法本质上复制了该功能。它还提供了更好的 API。
  • 如果我没记错的话final可以当成readonly
  • 好吧,final 并不一定意味着readonly。这意味着我们正在为这个字段设置一定的内存块,并且该内存块的 boundaries 可能不会改变。现在,该内存块中的位可能会更改,但字段可能不会更改以引用不同的对象。请注意,对于诸如intdouble 之类的原语,这意味着该值是一个常量,因为每个值都被分别视为IntegerDouble 类的不同实例。
【解决方案2】:

这是真的!

在 Java 中,通常的做法是将类变量声明为私有,然后编写公共访问器和转换器方法来在类外控制它们。

【讨论】:

    【解决方案3】:

    创建访问器方法通常很好,以规范任何其他类(和任何人)可以使用的数据。

    特别是在大型项目中,您希望其他类只使用该类中众多变量中的一小部分,因此您只需创建几个 getter 方法。

    另一方面,它使代码更清晰,更容易看到正在发生的事情。第三,使用错误的变量很难在程序中创建自己的错误,因为在其他类中可供选择的变量较少。

    【讨论】:

      【解决方案4】:

      我推荐阅读面向对象的编程哲学:

      wikipedia:

      当您定义访问器时,您可以在其中编写一些额外的逻辑来保护您的对象的状态。

      【讨论】:

        【解决方案5】:

        是的,这是一个约定。

        它允许您控制其他类如何访问成员(通常是私有的)。例如,您可以从返回和设置值的基本 get/set 开始。但也许在项目的后期你会想要添加更多的控制。在这种情况下,您只需更改 get/set 方法,而不是重构您的所有项目。

        【讨论】:

        • 在上面的详细说明中,可能最初该值来自一个简单的字段变量,但后来 getter 返回一些从其他数据计算的响应,而不是简单地传递字段的内容。此外,您可能将初始字段重构为单独的对象,但仍想在此(现在)更高级别的对象上提供访问器。如果你从一开始就使用访问器方法,你只需要重构提供者端,而不是消费者端。
        【解决方案6】:

        我想说的是,如果可能的话,最好不要使用访问器方法。让类在自己的状态下工作,而不是将其暴露给另一个类使用。

        如果您必须公开状态,访问器方法让您有机会返回状态的副本,而不是实际的对象。这样调用类将无法从外部修改状态,避免了不变量被破坏的问题。

        【讨论】:

        • 这就是我在 PHP (Codeigniter) 脚本中的做法
        猜你喜欢
        • 2011-11-22
        • 1970-01-01
        • 2014-06-06
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 2011-10-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多