0

プライオリティ キューを持つ単純なアプリケーションを作成しようとしています。次のエラーが表示されます --「エラー: leastPriority は抽象的ではなく、Comparator の抽象メソッド compare(Integer,Integer) をオーバーライドしません」および「エラー: 互換性のない型 Comparator cmp = new leastPriority();」

誰かがこのコードの問題を指摘できますか?

私のコードは次のとおりです。

class leastPriority implements Comparator<Integer> {    
    public int compare(Reservation x, Reservation y){
        if(x.getPriority() > y.getPriority()){
            return -1;
        }
        if(x.getPriority() < y.getPriority()){
            return +1;
        }
        return 0;
    }
}

public class prioQueue{

    public static void main(String args[]){
        Comparator<Reservation> cmp = new leastPriority();
        PriorityQueue<Reservation> queue = new PriorityQueue<Reservation>(10,cmp);
        queue.add(new Reservation(1,"Andy",10));
        queue.add(new Reservation(1,"Peter",1));
        queue.add(new Reservation(1,"John",4));

        while(true){
            Reservation r = queue.poll();
            if(r==null){
                break;
            }
            System.out.println(r.getName());
        }

    }
}
4

2 に答える 2

7

の型パラメーターComparator<T>compare(T o1, T o2)メソッドのパラメーターが一致しません。インターフェースではそれらは同じであるため、それらに同一の型を与える必要があります。

これを変える:

class leastPriority implements Comparator<Integer>

に:

class leastPriority implements Comparator<Reservation>
于 2013-05-09T15:05:24.107 に答える
1

leastPriorityComparator<Reservation>の代わりに実装する必要がありComparator<Integer>ます。ジェネリック型は、compare()メソッドでパラメーターとして受け入れられる型です。

PS すべての Java クラスに最初の大文字 ( PrioQueue) と ( LeastPriority) を付けて名前を付けることをお勧めします。

于 2013-05-09T15:07:02.443 に答える