4

在我当前的项目中,我有一个将其实例存储在变量中的类。这个实例应该可以被项目中的所有其他类访问,但它只能被它自己的类改变。

我怎样才能做到这一点?

4

4 回答 4

18

写一个publicgetter,但没有 publicsetter。和领域本身private

于 2013-01-14T19:01:41.120 回答
4

简而言之,就是所谓immutable object的,构造后的状态是Object不能改变的。

String是 immutable 的一个常见例子Class

class immutable通过以下方式制作 -

  • 确保类不能是overridden- 制作class final,或使用 static工厂并保持构造函数私有。
  • 制作字段privatefinal
  • 强制调用者在一个步骤中完全构造一个对象,而不是使用no-argument constructor结合随后的setXXX方法调用。
  • 不提供任何可以以任何方式改变对象状态的方法——不仅仅是setXXX方法,而是任何可以改变状态的方法
  • 如果类有任何可变对象字段,那么当在类和它的调用者之间传递时,它们必须被防御性地复制。
于 2013-01-14T19:06:43.360 回答
2

有人建议“public getter but no public setter for the private field”。

注意:这仅在字段是原始类型时才有效。
如果是带setter的对象,内容还是可以修改的;因此不是只读的。

有趣的是,Java 语言提供了一些结构来使返回类型为只读,而无需进行深度复制/克隆。

我正在成像 ReadOnly getEmployee() { ...}

于 2015-03-13T19:21:12.023 回答
0

可以在许多地方找到用于实例化单例的样板代码,例如参见http://www.javacoffeebreak.com/articles/designpatterns/index.html

请注意,许多人认为单例是一种反模式,因为一旦您的应用程序中充斥着对单例的引用,就很难摆脱它。

于 2013-01-14T19:10:36.827 回答