如何从具有不同类型的对象数组中克隆对象

时间:2017-12-17 15:02:49

标签: java deep-copy cloneable

我有这段代码:

int width = 1280;
int height = 720;

List<ElectronicDevice> devices = new ArrayList<ElectronicDevice>();

class ElectronicDevice {
  int x;
  int y;
  // ...
}

class EClock extends ElectronicDevice {
  int hz;

  EClock(int x, int y, int clock) {
    this.x = x;
    this.y = y;
    this.hz = hz;
  }
  // ...
}

class EBulb extends ElectronicDevice {
  EClock(int x, int y) {
    this.x = x;
    this.y = y;
  }
  // ...
}

class ToolbarElement {
  ElectronicDevice dev;

  ToolbarElement(ElectronicDevice dev) {
    this.dev = dev;
  }

  public void addDevice() {
    // somehow add a copy of `dev` to the `devices` list
  }
}

List<ToolbarElement> elements = new ArrayList<ToolbarElement>();

elements.add(new EClock(width/2, height/2, 5));
elements.add(new EBulb(width/2, height/2));

elements.get(0).addDevice();

我需要将{ToolerElement dev的副本添加到devices,但我不知道如何。它需要是一个深层复制。在该计划中,我不了解所有设备的构造函数,我只想将dev深入克隆到devices

我尝试将implements Cloneable添加到ElectronicDevice类,但之后我需要将clone()方法添加到每个扩展ElectronicDevice的类中。

implements Cloneable添加到ElectronicDevice之后,它大部分都有效,但是在添加了多个时钟之后所有时钟都已经去同步(这是Processing中的图形应用程序,每个扩展的类{{1}可以有ElectronicDevice方法指定它的行为方式,时钟在0和1之间振荡,频率为behavior() Hz。)

这是我的hz实施:

addDevice()

是否有任何解决方案不需要修改扩展ElectronicDevice的每个类?

0 个答案:

没有答案