回答这个问题的答案: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”。
为什么呢?
答案 0 :(得分:0)
你确定你的地图没有在其他地方被修改(清除,......)? 因为这段代码应该有用。
我不认为&#34; unmodifiableMap&#34;在使用&#34; final&#34;时非常有用,它只是保护地图不会被引用修改。因此,值可以通过外部调用来改变。
答案 1 :(得分:0)
当我在我的机器上执行相同的代码时,它会工作并按照您的要求打印data
两次,此代码不是您的问题。
<强>更新强>
也许MyClass
会引用您包裹中的另一个MyClass
?
检查你的进口..
尝试编译并从命令行运行它并检查是否得到相同的结果,这里有你遗漏的东西