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

在 java 6 中,您需要指定Map.Entry变量的类型

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 中工作,但我可以说您需要指定泛型类型Entry才能使其在 Java 6 中工作。

于 2013-03-05T17:32:46.167 回答
0

我认为它是 Java 6 中的模板问题。

这修复了它:

公共静态无效打印地图(地图对象){

    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 回答