[我投票决定为社区重新开放这个。问题Map.get(Object key) 不是(完全)通用的原因是什么确实确定了问题的根本原因。但对我来说,Stack Overflow 是关于回答问题、访问工作示例代码和支持 API 使用的特定实例——而不是关于创建唯一根本原因的规范。我找不到另一个帖子,可能是因为它的标题。创建枚举是为了提供命名常量的安全替代方案。这个问题破坏了这个好处——没有在 API 中提及,也没有编译器警告。为什么将安全级别降低到命名常量以下?对于枚举用户来说,这个问题很有用——它在谷歌上排名第一。]
这应该编译吗?确实如此,即使我从使用 EnumAlpha 类型初始化的 enumMap 中获取了不同类型 (EnumDelta) 的枚举成员。我认为作为泛型类型,EnumMap 将保证 EnumAlpha 的类型安全。
import java.util.EnumMap;
class Enum {
static enum EnumAlpha { ALPHA, BETA; }
static enum EnumDelta { DELTA, EPSILON; }
static EnumMap<EnumAlpha, String> enumMap = null;
public static void main (String[] args) {
enumMap = new EnumMap<EnumAlpha, String>(EnumAlpha.class);
String string = "foo";
enumMap.put(EnumAlpha.ALPHA, string);
//why does this line compile?
System.out.println(enumMap.get(EnumDelta.DELTA));
}
}
程序输出:
无效的