Преобразование между типами на основе реализации одного и того же интерфейса - PullRequest
0 голосов
/ 03 февраля 2012

Как создать связанный список, в котором должны храниться элементы данного интерфейса (Sortable)?

Интерфейсы для построения:

public interface Sortable<T>

Моя реализация списка называется public class DoublyLinkedList который хранит данные в узлах класса public class DoublyLinkedListElement implements Sortable<Object>

Пока все хорошо. Однако есть еще один класс public class Product implements Sortable<Product>.

Можно ли использовать методы DoublyLinkedList для добавления объектов типа Product в DoublyLinkedList без преобразования типа в DoublyLinkedListElement. Если я пытаюсь это сделать, я получаю фактический аргумент. Продукт не может быть преобразован в DoublyLinkedListElement путем преобразования вызова метода .

Ответы [ 2 ]

0 голосов
/ 03 февраля 2012

Стесняюсь ответить на этот вопрос полностью; но поскольку дженерики приобрели вкус, может быть что-то вроде:

public class DoublyLinkedList<T extends Sortable<T>> {
    private Element<T> first;
    private Element<T> last;
}

class Element<T extends Sortable<T>> {
    private T value;
    private Element<T> previous;
    private Element<T> next;
}
0 голосов
/ 03 февраля 2012

Я не уверен, что понимаю проблему, но думаю, что вам нужно сделать, чтобы ваш метод add принял тип Sortable. Тогда вам не нужно ничего кастовать, и вы сможете добавить Product или DoublyLinkedListElement.

DoubleLinkedList<Sortable> list = new DoublyLinkerList<Sortable>();
list.add(new Product());
list.add(new DoublyLinkedListElement());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...