静态映射的初始化:返回null值

时间:2017-04-01 15:22:49

标签: java collections static hashmap initialization

回答这个问题的答案:How can I initialise a static Map?我正在尝试在我的项目中创建静态地图。
下面的代码片段:

public class MyClass {

    public static final Map<String, String> dataMap;

    static {
        Map<String, String> tempMap = new HashMap<String, String>();
        try {
           // Getting a string value from a file, e.g. String data
           String data = "data";
           tempMap.put("firstData", data);
        }
        catch(Exception e) {}

        dataMap = Collections.unmodifiableMap(tempMap);

        //DEBUG (I test it and it correctly prints "data")
        System.out.println(dataMap.get("firstData"));
     }
}

然后我在另一个类中调用地图,如下所示:

public class AnotherClass {

   @Before
   public void MyMethod() {
      System.out.println(MyClass.dataMap.get("firstData"));
   }

   @Test
   public void testMethod() {}
}

现在它打印null,而不是值“data”。
为什么呢?

2 个答案:

答案 0 :(得分:0)

你确定你的地图没有在其他地方被修改(清除,......)? 因为这段代码应该有用。

我不认为&#34; unmodifiableMap&#34;在使用&#34; final&#34;时非常有用,它只是保护地图不会被引用修改。因此,值可以通过外部调用来改变。

答案 1 :(得分:0)

当我在我的机器上执行相同的代码时,它会工作并按照您的要求打印data两次,此代码不是您的问题。

<强>更新 也许MyClass会引用您包裹中的另一个MyClass? 检查你的进口.. 尝试编译并从命令行运行它并检查是否得到相同的结果,这里有你遗漏的东西