如何创建“不可变”的对象?课堂'目标'使用以下代码时:
目标a =新目标(2,3).coordinateChange(2,1).scale(0.5);
所以' a'用(2,2)点坐标初始化 - coordinateChange应该为x,y坐标添加值 - 比例应缩放它们,即上例中的50%
我知道如何在没有不可变类的情况下执行此操作,但如果上面的代码用于初始化最终对象,则不知道该类应该如何看待。
答案 0 :(得分:2)
您必须使每个coordinateChange
和scale
方法返回一个新的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( ...
,因此实际上是制作一个全新的对象。
每种方法中提到的x
和y
都是Aim
类的字段,因此如果您使用不同的名称,则可能需要重命名这些字段。