2011-01-15 7 views
2

Wenn ich eine LinkedList instanziieren möchte und Zugriff auf die Methoden sowohl in List- als auch in Dequeue-Interfaces benötige und nicht in die konkrete Implementierung eingeben möchte und möchte zwischen den Schnittstellen zu werfen, gibt es einen Weg?Verwendung von LinkedList in Java, wenn sowohl List- als auch DeQueue-Methoden benötigt werden

d.h .:

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 

Antwort

5
public interface Foo<T> extends List<T>, Deque<T>{} 

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

Foo ll = new Bar(); 

Sie haben in der Nähe von mir nicht verdunkeln, sollte dies allerdings kompilieren.

+1

Ich wusste, dass es einen Grund gab, warum Go's Duck-Typ von Interfaces sehr ansprechend war. –

+0

danke du fauler Affe –

0

Ich sehe nicht, wie Sie das tun können, wenn Sie ll als java.util.List deklarieren. Sollte in der Lage sein, Ihre eigene Klasse zu erstellen, aber dann sind Sie daran gebunden und nicht an die Aktienklassen/Schnittstellen ...

1

Ich denke in Java haben Sie keine andere Wahl, als den konkreten Typ zu verwenden oder zwei zu speichern Verweise auf dasselbe Objekt, eines als List und das andere als 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; 
    } 

Nicht sagen, dass ich das besonders mag.

Verwandte Themen