2011-01-15 1 views
2

LinkedListをインスタンス化してListとDequeueの両方のインターフェイスのメソッドにアクセスする必要があり、具体的な実装に入力したくない場合インターフェイス間でキャストする方法はありますか?ListとDeQueueの両方のメソッドが必要な場合に、JavaでLinkedListを使用する

すなわち:

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 

答えて

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

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

Foo ll = new Bar(); 

私の近く日食持っていない、とはいえ、これはコンパイルする必要があります。

+1

Goのダックタイピングスタイルのインターフェイスが非常に魅力的だった理由はわかっていました。 –

+0

おかげで怠惰な猿 –

0

私はあなたがjava.util.Listとしてllを宣言している場合、あなたがそれを行う方法を見ていません。あなた自身のクラスを作成することができなければならないが、次にそれはストッククラス/インターフェースではなく束縛されるだろう。

1

Javaでは、コンクリートタイプを使用するか、 1つはListとしてタイプされ、もう1つはデキューされた同じオブジェクトへの参照です。

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

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

私は特にそういうわけではありません。