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 如果上面的代码用于初始化最终对象,应该是什么样子。
您必须使每个 coordinateChange
和 scale
方法 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( ...
,所以实际上是在制作一个全新的对象。
每个方法中提到的 x
和 y
是您的 Aim
class 的字段,因此如果您使用不同的字段,您可能需要重命名这些字段这些的名称。
如何在使用以下代码时创建 '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 如果上面的代码用于初始化最终对象,应该是什么样子。
您必须使每个 coordinateChange
和 scale
方法 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( ...
,所以实际上是在制作一个全新的对象。
每个方法中提到的 x
和 y
是您的 Aim
class 的字段,因此如果您使用不同的字段,您可能需要重命名这些字段这些的名称。