-1

我必须 java 枚举,A 和 B,以及 EnumMap 是否可以将 A 和 B 中的键添加到该映射中?

EnumMap<? extends Enum,Object> enumMap = new EnumMap(Enum.class);

Object o1 = new Object();
Object o2 = new Object();

Enum e1 = A.X
Enum e2 = B.X
enumMap.put(e1,o1)
enumMap.put(e2,o2)

我试过没有成功,我做错了什么吗?

4

3 回答 3

1

使用不同的枚举作为映射的键不起作用。从文档中。

枚举映射中的所有键都必须来自创建映射时显式或隐式指定的单个枚举类型。

您需要使用不同的地图实现。

于 2013-10-16T12:20:18.393 回答
0

您可以通过以下方式尝试。考虑以下示例。

public enum EnumA {
typeA("1");
 EnumA(String s) {
 }

}

.

public enum EnumB {
typeB("2");

 EnumB(String s) {
}

}

现在您可以按如下方式创建地图。

    Map<Enum,String> enumMap=new HashMap<>();
    enumMap.put(EnumA.typeA,"a");
    enumMap.put(EnumB.typeB, "b");

    System.out.println(enumMap);
于 2013-10-16T12:22:19.633 回答
0

我刚刚偶然发现了你的问题,并想我想解释一下为什么不能使用不同的枚举作为地图的键。

为了做到这一点,我们首先必须研究 EnumMap 的实现。在 Java 中,EnumMap 只是一个具有值对象数组的对象。让我们假设这个例子:

你有你的枚举类颜色

enum Colors { 
    BLUE,
    RED,
    YELLOW;
}

和一个在 EnumMap 中存储一些彩色水果的类:

class MyClass { 
    EnumMap<Colors, String> coloredFruits = new EnumMap<>(Colors.class);

    void main() { 
        coloredFruits.put(Colors.RED, "Apple");
        coloredFruits.put(Colors.BLUE, "Grape");
        coloredFruits.put(Colors.YELLOW, "Banana");
    }
}

Java 现在所做的是创建一个新的 EnumMap - 具有以下数组的对象:

String[] values = { "Grape", "Apple", "Banana" }

这正是 EnumMap 如此高效的原因。它实际上不仅仅是一个具有值对象数组和一些存储类的字段的对象(在我们的示例中是Class keyType = Colors.class)。为了使其按预期工作,只能有一个 keyType 类。

于 2016-02-27T19:25:15.353 回答