JAVA中的不可变对象初始化

时间:2018-01-28 01:50:53

标签: java class object immutability

如何创建“不可变”的对象?课堂'目标'使用以下代码时:

目标a =新目标(2,3).coordinateChange(2,1).scale(0.5);

所以' a'用(2,2)点坐标初始化 - coordinateChange应该为x,y坐标添加值 - 比例应缩放它们,即上例中的50%

我知道如何在没有不可变类的情况下执行此操作,但如果上面的代码用于初始化最终对象,则不知道该类应该如何看待。

1 个答案:

答案 0 :(得分:2)

您必须使每个coordinateChangescale方法返回一个新的Aim对象,因为您无法更改您创建的原始对象。这意味着您的Aim类必须包含类似

的内容
public Aim coordinateChange(double changeInX, double changeInY) {
    return new Aim(x + changeInX, y + changeInY);
}

public Aim scale(double scaleFactor) {
   return new Aim(x * scaleFactor, y * scaleFactor);
}

您可以看到每个方法都包含new Aim( ...,因此实际上是制作一个全新的对象。

每种方法中提到的xy都是Aim类的字段,因此如果您使用不同的名称,则可能需要重命名这些字段。