Использование LinkedList в Java, когда нужны методы List и DeQueue - PullRequest
2 голосов
/ 15 января 2011

Если я хочу создать экземпляр LinkedList и требовать доступа к методам в интерфейсах List и Dequeue, и не хочу печатать в конкретной реализации и не хочу приводить между интерфейсами, есть ли способ?

т.е.:

LinkedList ll = new LinkedList(); // don't want to do this...


List ll = new LinkedList();
ll.peekFirst(); // can't access peekFirst method
((DeQueue) ll).peekFirst(); // Kinda ugly

Ответы [ 3 ]

5 голосов
/ 15 января 2011
public interface Foo<T> extends List<T>, Deque<T>{}

public class Bar<T> extends LinkedList<T> implements Foo<T>{}

Foo ll = new Bar();

У меня нет затмения, это должно скомпилироваться.

1 голос
/ 15 января 2011

Я думаю, что в Java у вас нет выбора, кроме как использовать конкретный тип или хранить две ссылки на один и тот же объект, один тип как List, а другой как Dequeue.

List<T>       list;
Dequeue<T>    queue;

/** Construct a new instance of SomeClass */
private SomeClass() {
    LinkedList<T> tmp=new LinkedList<T>();
    list=tmp;
    queue=tmp;
    }

Не говорю Iособенно вот так.

0 голосов
/ 15 января 2011

Я не вижу, как вы можете сделать это, если вы объявите ll как java.util.List. Должен быть в состоянии создать свой собственный класс, но тогда вы будете привязаны к этому, а не к классам / интерфейсам:

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