Копирование дженериков в массив? - PullRequest
0 голосов
/ 18 июня 2020

Спецификация задачи следующая: «Ваша задача - создать Мультипликатор, который принимает Папки со всем, что может быть скопировано (т.е. реализует интерфейс Копирования), и создает массив Папок с копиями исходного содержимого Папки».

Я пытаюсь понять, как добавлять объекты в массив. Однако, когда я запускаю написанный мной код, я получаю на выходе значение null.

Как я могу добавить общие c объекты в массив?

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;
    }
}

1 Ответ

1 голос
/ 18 июня 2020

Проблема не в том, как вы создали новый массив типа generi c. Фактически, вы создали Folder<T>[] правильно, используя new Folder[arraySize]. Да, есть предупреждение, но это из-за ограничения / недостатка в системе типов Java.

Причина, по которой все это значение null, состоит в том, что вы создали пустую папку, 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...