EnumMap Typesafe?

时间:2016-07-01 02:19:52

标签: java generics enum-map

[我投票给社区重新开放。问题What are the reasons why Map.get(Object key) is not (fully) generic确实确定了问题的根本原因。但对我来说,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)); 


            }


    }

节目输出:

  

1 个答案:

答案 0 :(得分:1)

对于EnumMap.get(),答案是,原因在于linked post中的解释。

我能够通过添加以下行来避免难以理解的空指针异常:

>>> import time
>>> currentTime = time.ctime()
>>> 
>>> render_str('CurrentTime.html', currentTime=currentTime)