我刚刚偶然发现了你的问题,并想我想解释一下为什么不能使用不同的枚举作为地图的键。
为了做到这一点,我们首先必须研究 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 类。