JAVA中的不可变对象初始化

JAVA中的不可变对象初始化,java,class,object,immutability,Java,Class,Object,Immutability,使用以下代码时,如何创建“不可变”类“Aim”的对象: 目标a=新目标(2,3)。协调变化(2,1)。量表(0.5) 所以“a”用(2,2)点坐标初始化 --坐标更改应将值添加到x、y坐标 --在上述示例中,比例应为50% 我知道如何在没有不可变类的情况下实现这一点,但不知道如果要使用上述代码初始化最终对象,该类应该是什么样子。您必须使每个协调更改和缩放方法返回一个新的目标对象,因为您无法更改您创建的原始对象。这意味着您的Aim类必须包含以下内容 public Aim coordinateCha

使用以下代码时,如何创建“不可变”类“Aim”的对象:

目标a=新目标(2,3)。协调变化(2,1)。量表(0.5)

所以“a”用(2,2)点坐标初始化 --坐标更改应将值添加到x、y坐标 --在上述示例中,比例应为50%


我知道如何在没有不可变类的情况下实现这一点,但不知道如果要使用上述代码初始化最终对象,该类应该是什么样子。

您必须使每个
协调更改
缩放
方法返回一个新的
目标
对象,因为您无法更改您创建的原始对象。这意味着您的
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);
}
您可以看到,这些方法中的每一个都包含
新目标(…
),因此实际上是在创建一个全新的对象

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