首页 > 解决方案 > 将泛型复制到数组?

问题描述

任务规范如下:“您的任务是创建 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;
    }
}

标签: javagenerics

解决方案


问题不在于您如何创建一个泛型类型的新数组。事实上,您创建了一个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;
}

推荐阅读