Java 类变量:公共访问只读,但私有访问r/w

Java 类变量:公共访问只读,但私有访问r/w,java,class-variables,Java,Class Variables,在我当前的项目中,我有一个将其实例存储在变量中的类。这个实例应该可以被项目中的所有其他类访问,但是它只能被自己的类修改 我怎样才能做到这一点 写一个publicgetter,但不写publicsetter。而字段本身private简言之,称为不可变对象,对象的状态在构造后不能改变 String是不可变类的常见示例 通过以下操作使一个类不可变- 确保类不能被覆盖-使类成为最终类,或使用 静态工厂,并保持构造函数私有 使字段私有和最终 强制调用方在单个步骤中完全构造对象, 而不是将无参数构造函数与

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


我怎样才能做到这一点

写一个
public
getter,但不写
public
setter。而字段本身
private

简言之,称为
不可变对象
对象
的状态在构造后不能改变

String
是不可变
类的常见示例

通过以下操作使一个
不可变
-

  • 确保类不能被覆盖
-使类成为最终类,或使用
静态
工厂,并保持构造函数私有
  • 使字段
    私有
    最终
  • 强制调用方在单个步骤中完全构造对象, 而不是将
    无参数构造函数
    与后续 调用
    setXXX
    方法
  • 不要提供任何可以更改对象状态的方法 以任何方式-不仅仅是
    setXXX
    方法,还有任何可以更改的方法 陈述
  • 如果类有任何可变的对象字段,那么它们必须是 在类与其调用方之间传递时进行防御复制

  • 在许多地方都可以找到用于实例化单例的样板代码,例如

    <>请注意,许多人认为单身是一种反模式,因为一旦你的应用程序中到处都是对单身人士的引用,就很难摆脱。

    有人建议“公共吸气者,而不是私人领域的公共设定者”。 警告:仅当字段为基元类型时,此选项才有效。
    如果是具有setter的对象,则仍然可以修改内容;因此不是只读的

    看到Java语言提供一些构造,使返回类型成为只读的,而不必进行深度复制/克隆,这将是一件有趣的事情

    我在想象 只读getEmployee(){
    …}

    并且字段的类型必须是不可变的。如果字段的类型不是不可变的,则始终可以返回字段的深度副本,而不是对其自身的引用,以确保其他人无法修改该字段。“其实例”是什么意思?这个类只有一个实例吗?(单身汉)是的,这就是我的意思。