Java:根据变量访问正确的映射而不使用“if”

时间:2016-01-22 14:28:06

标签: java

这就是我的情况:

我有一个获取String和一堆其他信息的方法。 根据字符串的内容,我想将其他信息放入我拥有的两个地图中的一个。像这样:

if (string.equals("A")) {
  A.put[..]
} else if (string.equals("B")) {
  B.put[..]
}

但是由于这种情况在我的方法中发生了几次,我不希望每次因为冗余而使用if / else。

所以我想我需要的是某种对象/指针/引用,我可以在开头分配我想要使用一次的Map,然后将其用作占位符。

2 个答案:

答案 0 :(得分:1)

这就是我们有参考变量的原因:

Map<?,?> map;
if(string.equals("A"))
    map = A;
else if(string.equals("B"))
    map = B;
else
    map = new HashMap<>();

工作正常。最后一行更像是对String的错误检查,并且在您的方法完成后将被垃圾收集(否则可能不会初始化map,这将抛出NullPointer)。在此之后,您可以将所有内容放入地图中(感谢参考变量:-))。请记住,地图只是对地图A或B(或“空白”)

的引用

答案 1 :(得分:1)

您似乎想要一张地图地图。

Map<String, Map<?, ?>> maps = new HashMap<>();

Map<?, ?> map = map.get(string);
map.put[...];

如果您想根据需要添加地图,可以使用

Map<?, ?> map = map.computeIfAbsent(string, HashMap::new);