Реализация очереди с интерфейсом списка универсального типа - PullRequest
0 голосов
/ 14 октября 2019

Мне необходимо создать класс очереди, который принимает обобщенный тип T, который будет в нем содержаться.

В качестве контейнера для T я должен использовать универсальный список List. Конкретная реализация (например, ArrayList или LinkedList) должна быть указана при вызове конструктора Queue в качестве параметра.

Прямо сейчас я реализовал класс как Queue<T>, и конструктор принимает класс некоторого класса. вид, который расширяет List<T>.

Таким образом, я должен иметь возможность создать новый экземпляр списка, используя getDeclaredConstructor().newInstance().

import java.lang.reflect.InvocationTargetException;
import java.util.List;

// FIFO QUEUE
public class Queue<T> {
    private List<T> list;

    public Queue(Class<? extends List<T>> aClass) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        list = aClass.getDeclaredConstructor().newInstance();
    }

    public boolean put(T element) {
        return list.add(element);
    }

    public T get() {
        T result = null;
        if (list.size() > 0) {
            result = list.remove(0);
        }
        return result;
    }

    public boolean empty() {
        return list.isEmpty();
    }
}

Затем я пытаюсь создать новый экземплярочереди в основном:

ArrayList<Integer> arrayList = new ArrayList<>();
Queue<Integer> queue = new Queue<>(arrayList.getClass());

В настоящее время я использую IntelliJ IDEA и не могу скомпилировать код.

Я получаю сообщение об ошибке (Cannot infer arguments), указывающее на new Queue<>.

Как правильно вызывать конструктор при сохранении инкапсуляции?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...