不可变类型:公共最终字段与 getter

2022-08-31 15:50:24

我需要一个小的容器类来存储一些应该是不可变的字符串。由于String本身是一个不可变的类型,我想到了这样的东西:

public final class Immu
{
  public final String foo;
  public final String bar;

  public Immu(final String foo, final String bar)
  {
    this.foo = foo;
    this.bar = bar;
  }
}

许多人似乎完全反对使用公共字段,而是使用 Getters。恕我直言,在这种情况下,这只是样板,因为字符串本身是不可变的。

我可能错过了其他想法?


答案 1

我会做你认为最简单,最清晰的事情。如果您有一个数据值类,该类仅由有限数量的类使用。然后我会避免 getter/setter,而是使用包本地或公共字段。

如果你有一个你希望其他模块/开发人员使用的类,那么从长远来看,遵循getter/setter模型可能是一种更安全的方法。


答案 2

问题在于统一接入原则。您以后可能需要进行修改,以便通过方法而不是固定来获取它,并且如果您公开了字段而不是getter,则需要中断API。foo