2013-12-12 5 views
5

私は、最初から一般的な優先順位のキューを実装する必要がある割り当てがありますが、私は意味がないと思うというエラーが出ています。ジェネリックアイテムを汎用ArrayListに追加するにはどうすればよいですか?

public class PriorityQueue<E> { 
    private ArrayList<E> items = new ArrayList<E>(0); 
    ... 
    public <E extends Comparable<E>> void insert(E newItem){ 

     if(numOfItems == 0){ 
      items.add(newItem); //ERROR: The method add(E) in the type ArrayList<E> 
             is not applicable for the arguments (E) 
      rear++; 
      numOfItems++; 
     }else{ 
      //INCOMPLETE 
     } 
    } 
} 

答えて

3

を隠しているので、あなたは

<E extends Comparable<E>> 

int型を必要としません彼のインスタンス。すでにクラスレベルで宣言しているので、メソッド宣言にtypeパラメータは必要ありません。

あなたはただ、それがコンパイルされます

public void insert(E newItem){ 

を宣言することができます。

4
public <T extends Comparable<E>> void insert(E newItem){ 

変更 'T' への最初の 'E'、typeパラメータは、元の 'E'

+0

使用しない型パラメータを追加する理由は何ですか? – ILMTitan

3

PriorityQueueでは、すべての項目が同等でなければなりません。したがって、あなたはクラス自体、あなたがそれはあなただけの正しく制約クラス型paramemterを隠して、あなたの方法から型パラメータを削除する必要がある、ということで行われたら

public class PriorityQueue<E extends Comparable<? super E>> { 
    ... 

に同等の拘束を置く必要があります。

public void insert(E newItem) { 
    ... 

P.S. Comparable<? super E>は、すべてのアイテム(E)を互いに比較できる最も一般的な制約が必要なためです。