假设我有一个名为 SuperClass 的抽象类和许多扩展它的类。我有一个 SuperClass[] 类型的数组。我想用相同子类和相同属性的新对象创建一个数组。
我尝试通过创建实例化新对象并用它们填充新数组来做到这一点。但是,这不起作用,如下所示。
SuperClass[] newArray = new SuperClass[arr.length];
for (int i = 0; i <= arr.length; i++) {
SuperClass toBeCopied = arr[i];
newArray[i] = new SuperClass(toBeCopied.attribute1, toBeCopied.attribute2...);
这不起作用,因为 SuperClass 是抽象的,因此无法实例化。
我还查看了 .clone(),但 SuperClass 没有扩展 Cloneable。
还有其他方法可以复制内容类型未知的数组吗?
最佳答案
Arrays
中有一组静态方法可以复制数组。例如:<T> T[] copyOf(T[] original, int newLength)
。用法:
abstract class SuperClass { }
class SubClass extends SuperClass { }
// copy
SuperClass[] subClasses = new SubClass[10];
SuperClass[] subClassesCopy = Arrays.copyOf(subClasses, 10);
--更新--
由于您想要数组中每个对象的副本,因此您可以在 SuperClass
中定义一个抽象方法并让子类扩展它。
abstract class SuperClass {
public abstract SuperClass deepCopy();
}
class SubClass extends SuperClass {
private String value;
public SubClass(String value) {
this.value = value;
}
@Override
public SubClass deepCopy() {
return new SubClass(this.value);
}
}
然后调用 deepCopy
在您的代码中:
SuperClass[] subClasses = new SubClass[] { new SubClass("1"), new SubClass("2") };
SuperClass[] subClassesCopy = Arrays.stream(subClasses)
.map(orig -> orig.deepCopy())
.collect(Collectors.toList())
.toArray(new SuperClass[subClasses.length]);
关于java - 如何在不知道数组内容的特定子类型的情况下复制数组的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55897866/