2

私はこのコードを使用しています:

public static void printMap(Map<Integer, String> obj) {
        for (Map.Entry e : obj.entrySet()) {
            if (e.getKey() == 3) {
                System.out.println("OK!");
            }
        }
    }

Java 7で動作します。しかし、Java 6では、次の行でエラーが発生します。

if (e.getKey() == 3) {

このエラーが発生する理由を誰かに説明してもらえますか?

4

4 に答える 4

2

Map.EntryJava 6 では、変数の型を指定する必要があります

Map.Entry<Integer, String> e : obj.entrySet()

そのような のキーまたは値を比較する前にEntry。それ以外の場合、コンパイラはあなたがやっていると考えます

if (<object of type Object> == 3) 

それには意味がありません。

于 2013-03-05T17:32:25.217 に答える
1

おそらく、タイプをに割り当てる必要がありますEntry

public static void printMap(Map<Integer, String> obj) {
    for (Map.Entry<Integer, String> e : obj.entrySet()) {
        if (e.getKey() == 3) {
            System.out.println("OK!");
        }
    }
}

Java 7 では、ジェネリック フレームワークに変更が加えられています。あなたが示唆するように、そのコードが Java 7 で機能するかどうかはわかりませんが、Java 6 で機能するには、ジェネリック型を指定する必要があると言えますEntry

于 2013-03-05T17:32:46.167 に答える
0

Java 6のテンプレートの問題だと思います。

これで修正されます:

public static void printMap(Map obj) {

    for (Map.Entry<Integer, String> e : obj.entrySet()) {
        if (e.getKey() == 3) {
            System.out.println("OK!");
        }
    }
}

Java 6 は、Map から Map.Entry に引数を自動渡しません。

于 2013-03-05T17:35:10.090 に答える
-2

これを試して

if (e.getKey().toString().equals("3")) 

e.getKey()オブジェクトを返すと思いますが、それを整数と比較していました。整数に変換して比較するか、文字列に変換して比較します

于 2013-03-05T17:34:19.597 に答える