gpt4 book ai didi

java - 如何在不知道数组内容的特定子类型的情况下复制数组的内容?

转载 作者:行者123 更新时间:2023-12-02 09:57:22 25 4
gpt4 key购买 nike

假设我有一个名为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com