0

これは宿題です:

次のように定義されたジェネリック クラスがあります。

public class PriorityQueue<T extends Comparable<T>> {
    ArrayList<T> queue; 

public PriorityQueue(){
    queue = new ArrayList<>();
}

void add(T t){
    queue.add(t);
    Collections.sort(queue);
}

<T extends Comparable<T>> T remove(){
    T t = queue.get(0);
    queue.remove(t);
    return t;
}
}

しかし、NetBeans は行に次のエラー (赤い下線) を示していますT t = queue.get(0):

incompatible types
required: T#2
found:    T#1
where T#1,T#2 are type-variables:
T#1 extends Comparable<T#1> declared in class PriorityQueue
T#2 extends Comparable<T#2> declared in method <T#2>remove()

Tメソッド宣言で参照している型が、クラスの型パラメータで参照されている型と同じであることが、どういうわけか理解されていないようです。これはある種の構文の問題だと思います。

私はまた、物事を複雑にしすぎているのではないかと思いますT remove() {.. これは正しくコンパイルされますが、次のようにドライバー クラスを使用してテストしようとすると、次のようになります。

    PriorityQueue pq = new PriorityQueue<Integer>();

    int a = 10;
    int b = 12;
    int c = 5; 
    int d = 9;

    pq.add(a);
    pq.add(b);
    pq.add(c);
    pq.add(d);

    Integer i = pq.remove();

エラーが発生します:

Incompatible types: 
required: Integer 
found:    Comparable

ライン上Integer i = pq.remove();

おそらく明らかなように、私はジェネリックの使用方法を学んでいます。ここでどこが間違っているのかを理解してください。

4

1 に答える 1

3

変化する

PriorityQueue pq = new PriorityQueue<Integer>();

PriorityQueue<Integer> pq = new PriorityQueue<Integer>();

メソッドを削除する必要があります

T remove() {
...
于 2013-05-13T02:51:38.330 に答える