如何仅在知道其抽象基类时复制对象

时间:2014-02-11 23:34:12

标签: java android

我有一个抽象基类MusicTime,它有几个具体的子类 - QuaverSemiQuaverCrotchet等。子类实例包含在{{1收集。

我需要能够克隆这些对象,并且通过迭代集合并基于现有实例创建新实例来手动执行此操作。我显然无法实例化一个抽象类,那么有没有办法调用与每个现有实例相同的List<? extends MusicTime>构造函数的构造函数?如果它是MusicTime,那么我会创建一个新的Quaver对象吗?

2 个答案:

答案 0 :(得分:3)

我看到一个干净而肮脏的解决方案:

  • 为层次结构中的每个类实现clone()(来自Cloneable接口)方法(干净解决方案)
  • 使用instanceof运算符找出哪个类是(脏解决方案)的对象实例

  • 答案 1 :(得分:1)

    我相信你可以使用Prototype设计模式,你可以添加

    abstract MusicTime clone()
    

    在您的MusicTime基类中,并在所有创建自己的对象的子类中实现。 当您遍历列表调用克隆时。

    http://www.codeproject.com/Articles/42582/Prototype-Design-Pattern

    http://java.dzone.com/articles/design-patterns-prototype