初始化:空值返回
关注此问题的答案: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
,而不是价值的“数据”。
为什么?
你确定你的地图不被修改别的地方(清除...)? 因为这个代码应该工作。
我不认为“unmodifiableMap”是有用的,当你使用“最终”,它只是保护,地图将不会被引用修改。所以值可以通过外部呼叫改变。
唯一的区别似乎是该方法的MyMethod标注有@Before注解,因为它是一个测试 – PenguinEngineer
unmodifiableMap()是非常重要的。否则,您可以从任何地方获取对该地图的引用并将其清除(或添加/删除元素),但这可能不是期望的。 –
@PenguinEngineer发布了一个完整的重现问题的简单例子。 –
当我执行我的机器上相同的代码它的工作和打印data
两倍你excpected,此代码是不是你的问题。
UPDATE: 也许MyClass
指向另一个MyClass
在你的包? 检查你的进口.. 尝试编译并从命令行运行它,并检查你是否得到相同的结果,有一些你在这里丢失的东西
不,它不。但那不是你真正的代码,因为它甚至不能编译。 –
为什么你不能编译这段代码? – PenguinEngineer
因为MyMethod中缺少分号。发布一个完整的重现问题的最小例子。如果我使用此代码并修复它,并添加调用MyMethod的主方法,则无法重现该错误(如我所料)。 –