1

この質問は、ジェネリックと Comparable および Comparator インターフェイスの使用を扱います。

クラスチョコレートがあります:

public class Chocolate implements Comparable<Chocolate> {

    public int compareTo(Chocolate c) {
        if (this.getValue() > c.getValue()) {
            return 1;
        } else if (this.getValue() < c.getValue()) {
            return -1;
        } else {
            return 0;
        }
    }
}

とクラスのペア

public abstract class Pair<E extends Comparable<E>, T extends Comparable<T>>
    implements Comparable<Pair<E, T>> { 

    public int compareTo(Pair<E, T> p) {
        if (this.first.compareTo(p.first) > 0) {
            return 1;
        } else if (this.first.compareTo(p.first) < 0) {
            return -1;
        } else {
            if (this.second.compareTo(p.second) > 0) {
                return 1;
            } else if (this.second.compareTo(p.second) < 0) {
                return -1;
            }
        }
        return 0;
    }
}

そして、main メソッドを持つ別のクラス Sorter

public class SortingClient {

    public static void main(String[] args){

        Pair<Chocolate, Chocolate>[] pairs = (Pair<Chocolate, Chocolate>[]) new Pair<?,?>[numPairs];

        Comparator<Pair<Chocolate, Chocolate>> interfaceChocolate = new Comparator<Pair<Chocolate, Chocolate>>(){
            public int compare(Pair<Chocolate,Chocolate> c1, Pair<Chocolate,Chocolate> c2){
                if (c1.compareTo(c2) > 0){
                    return 1;
                }
                else if (c1.compareTo(c2) < 0){
                    return -1;
                }
                else {
                    return 0;
                }
            }
        } * Error here*
    }

最後から 2 行目に「構文エラーです。LocalVariableDeclarationStatement を完了するには ";" を挿入してください」というエラーが表示されます。このエラーの意味と修正方法を教えてください

4

4 に答える 4

1

匿名クラスのインスタンスを作成している場合でも、変数宣言を終了するには常にセミコロンが必要です。

たとえば具象クラスPairChocolateComparatorがある場合でも、セミコロンを使用します。

Comparator<Pair<Chocolate, Chocolate>> interfaceChocolate =
    new PairChocolateComparator<Pair<Chocolate, Chocolate>>();

したがって、匿名クラス インスタンスのセミコロンを追加する必要があります。

Comparator<Pair<Chocolate, Chocolate>> interfaceChocolate =
    new Comparator<Pair<Chocolate, Chocolate>>(){
         // body omitted
};
于 2013-06-11T00:03:45.933 に答える