java - 将泛型复制到数组?
问题描述
任务规范如下:“您的任务是创建 Multiplicator,它接收包含任何可以复制的文件夹(即实现 Copy 接口)并创建一个包含原始文件夹内容副本的文件夹数组。”
我试图弄清楚如何将对象添加到数组中。但是,当我运行我编写的代码时,我得到一个空输出。
如何将通用对象添加到数组中?
import java.util.ArrayList;
import java.util.List;
/**
* Class to work with
*/
class Multiplicator {
public static <T extends Copy<T>> Folder<T>[] multiply(Folder<T> folder, int arraySize) {
// Method to implement
Folder myFolder = new Folder();
Folder<T>[] folderArray = new Folder[arraySize];
for (int i = 0; i < arraySize; i++) {
folderArray[i] = (Folder<T>) myFolder.get();
}
return folderArray;
}
public static void main(String[] args) {
System.out.println("Well done!");
}
}
// Don't change the code below
interface Copy<T> {
T copy();
}
class Folder<T> {
private T item;
public void put(T item) {
this.item = item;
}
public T get() {
return this.item;
}
}
解决方案
问题不在于您如何创建一个泛型类型的新数组。事实上,您创建了一个Folder<T>[]
正确的,使用new Folder[arraySize]
. 是的,有一个警告,但那是因为 Java 类型系统的限制/缺陷。
之所以全部为空,是因为您创建了一个空文件夹,Folder myFolder = new Folder();
并将其内容(null
)放入数组(folderArray[i] = (Folder<T>) myFolder.get();
)中。
根据任务描述,您应该复制作为参数之一提供的文件夹的内容,folder
:
public static <T extends Copy<T>> Folder<T>[] multiply(Folder<T> folder, int arraySize) {
Folder<T>[] folderArray = new Folder[arraySize];
// for arraySize times...
for (int i = 0; i < arraySize; i++) {
// create a new, empty folder
Folder<T> newFolder = new Folder<>();
// put the copy of the parameter folder's contents into the new folder
newFolder.put(folder.get().copy());
// put the new folder into the array
folderArray[i] = newFolder;
}
return folderArray;
}