代码之家  ›  专栏  ›  技术社区  ›  Javallion

JAVA中的不可变对象初始化

  •  -1
  • Javallion  · 技术社区  · 7 年前

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

    目标a=新目标(2,3)。坐标变化(2,1)。刻度(0.5);

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

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   Dawood ibn Kareem    7 年前

    你必须 coordinateChange scale 方法返回新的 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 每个方法中都提到了 目标 类,因此如果要对这些对象使用不同的名称,则可能需要重命名这些对象。