JAVA 中的不可变对象初始化

Immutable object initialisation in JAVA

如何在使用以下代码时创建 'immutable' class 'Aim' 的对象:

Aim a = new Aim(2,3).coordinateChange(2,1).scale(0.5);

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

我知道如何在没有不可变 class 的情况下做到这一点,但不知道 class 如果上面的代码用于初始化最终对象,应该是什么样子。

您必须使每个 coordinateChangescale 方法 return 成为一个新的 Aim 对象,因为您无法更改你创造了。这意味着您的 Aim class 必须包含类似

的内容
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 class 的字段,因此如果您使用不同的字段,您可能需要重命名这些字段这些的名称。