场景: 我有一个继承自一个距离祖先类的子类层次结构。层次结构中的所有超类都是抽象的,因此唯一的具体类是那些没有子类的类。我有一个数组:
AncestralClass[] someObjects1 = new AncestralClass[someLength];
ancestralClass 是所有其他类继承自层次结构顶部的单个超类。这个数组填充了各种具体子类的不同对象。例如:
someObjects1[4] = new SubclassObject();
... 等等。
我有第二个完全相同形式的数组(相同的类型、大小等),但是第二个数组使用第一个数组来填充自己,其中的对象又属于各种具体的子类。更具体地说,第二个数组的元素中的对象类型将根据在第一个数组的相同元素中找到的对象类型来决定。所以我遇到的问题是:我不知道第一个数组中包含什么,因为它的内容是在运行时随机生成的,因此我不知道第二个数组的内容应该是什么,因为它们依赖于第一个数组大批。我不确定如何编写实例化第二个数组中的新对象的代码。用英文写的,我想要发生的事情听起来如此简单易行。我想遍历第二个数组,检查第一个数组中的对应位置,检查是什么类型的对象,然后在第二个数组中实例化一个该类型的新对象。那就是我不知道如何编码的内容:
someObjects2[i] = new (subclass that someObjects1[i] belongs to)();
问题 更笼统地说,我想实例化一个新对象,它是现有对象所属的类的新实例。我该怎么做,而且我确信有多种解决方案,那么哪个更好?