3

私は持っている -

import java.util.*;

public class TestCompare {

    List<String> list = Arrays.asList("10", "1", "20", "11", "21", "12");
    Comparator<String> cmp = new Comparator<String>() {
        public int compare(String o1, String o2) {
            return Integer.valueOf(o1).compareTo(Integer.valueOf(o2));
        }
    };
    Collections.sort(list, cmp);
}

Collections.sort(list, cmp);エラーがあります - Syntax error on token "(", delete this token。この構文のどこが間違っていますか?

4

4 に答える 4

9

コードをクラス ブロックで直接ラップするのではなく、メソッドでラップする必要があります。

于 2012-08-27T13:33:53.230 に答える
8

クラスに直接コードを含めることはできません。次のようなメソッドにする必要がありますmain

public class TestCompare {
    public static void main() {
      List<String> list = Arrays.asList("10", "1", "20", "11", "21", "12");
      Comparator<String> cmp = new Comparator<String>() {
      public int compare(String o1, String o2) {
        return Integer.valueOf(o1).compareTo(Integer.valueOf(o2));
      }
      };
      Collections.sort(list, cmp);
    }
}
于 2012-08-27T13:34:30.530 に答える
0

クラス レベルでは、宣言 (および初期化子) ブロックのみが許可されます。最初の 2 つのステートメントは宣言です (意図していない可能性がありますが、フィールド宣言として解釈されます)。3 番目は宣言ではないため、失敗します。

宣言できるのは、メソッド、フィールド、コンストラクター、内部クラスです。

于 2012-08-27T13:35:42.223 に答える