在拥有的 class 中使用 getter 有什么好处吗?

Are there any advantages to using a getter inside the owning class?

我在一些遗留代码中发现了以下内容:

public class MyClass
{
    private boolean myBool;

    public boolean getMyBool()
    {
        return myBool;
    }

    public void otherMethod()
    {
         // some other calculations
         boolean something = this.getMyBool();
         // some other calculations
    }
}

我是不是漏掉了什么?使用 getMyBool() 而不仅仅是直接调用 myBool 有优势吗?

因为在我看来,如果 getMyBool() 的行为发生变化,那么这个 class 将在调用此方法时背叛自己。

这不是背叛。如果你使用这个 class 并在 class 之外使用 getter/setter,改变功能也不是背叛。

想象class个人。此 class 有年龄,您想将小于零的值设置为零。您只需将 setter and/or getter 更改为适当的行为。

您真的不想将其从零以下更改为零 "sometimes"。这是原因,你应该在 class.

中调用 setter/getter

如果你想在同一个class中使用myBool;,你可以直接使用它。但是您不能在其他 class 中使用此值,因为它的访问说明符是 Private。我们不能使用私有成员并将其继承到其他 class。但是您可以调用 getMyBool(); 方法并从中获取相同的值。它是 public 方法。我们可以从任何地方使用它。

如果getMyBool是纯getter;也就是说,它只会检索该字段,然后对其进行方法调用就没有什么价值了。 getter 和字段之间的行为没有变化。

如果它不是一个纯粹的getter,它确实经常出现,那么方法调用是可以接受的。仅使用 getter 不会封装程序的全部意图。

其他类可能会继承这个,并用另一个实现覆盖getMyBool()

  • 延迟初始化
  • 使用静态属性
  • 使用一些复杂的业务逻辑
  • ...

另一个用例是当您想要使用方面来检测您的代码时。要么改变 getter 行为,要么记录 getters 调用...