java - 一旦调用构造函数,我可以使对象不可变吗?

标签 java immutability

class X
{
  String x1;
  String x2;
  //...
  String x15;

  public X (Other o)
  {
    // initialize x1,x2,...,x15
  }

  String getx1 () { return x1; }  // lot of getters
  String getx2 () { return x2; }
  //...
  String getx15 () { return x15; }
}

class X 的对象在 class Other 的构造函数中初始化;

class Other
{
  private X obj;
  // Other members
  public Other ()
  {
    obj = new X(this);
    //...
  }
  //...
}

我想以某种方式摆脱class X中的许多getter方法。我可以简单地删除这些并将 X 的所有数据成员置于 default 范围内(X 仅在包内使用)。

有什么方法可以在调用构造函数 Other 后使 X obj 的成员不可变吗?这里的想法是,当使用get()方法时,X内部的变量不能被修改。

obj.getx1();

现在,如果我简单地使用 obj.x1 那么它可能会被覆盖(或者至少在代码审查中,它会被反对)。

[注意:obj 必须仅在 Other() 构造函数中初始化]。

最佳答案

如果将成员变量声明为final,那么它们在构造函数之后是不可变的。

关于java - 一旦调用构造函数,我可以使对象不可变吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6451794/

相关文章:

java - java中的矩阵类

java - 如何在 Java 中识别不可变对象(immutable对象)

reactjs - 更新Reducer React Redux 中的嵌套状态

java - Gradle IntelliJ创意

java - 基于公共(public)类变量对 2 个类数组进行排序

Java 通过引用转码到 Python

rust - 为什么 io::copy 要求读者和作者都是可变引用?

c# - 消息传递类应该是不可变的吗?

javascript - 当字符串不可变时,如何使用它的原型(prototype)向字符串添加方法?

java - 如何将 JSON 字段映射到自定义对象属性?