2017-07-28 91 views
0

我在类中有一堆地图,我想制作一个通用方法来检索与ID匹配的特定地图。 喜欢的东西:检索与字符串名称相同的变量

private Map map1; 
private Map map2; 
private Map map3; 


public Map getMap(String id){ 
    return mapX; 
} 

当我调用该方法为:

getMap("map1"); 

它将返回MAP1。 任何方式我可以做这个转换而不创建地图的地图?

+0

使用工厂设计模式 – sForSujit

+1

存储它们'数组并通过索引检索它们? – assylias

+0

不知道这是否明智的做法,为什么外部*代码知道内部使用的名称? –

回答

2

尝试使用反射,例如:

private Map getMap(String id) throws NoSuchFieldException, IllegalAccessException { 
     getClass().getField("map" + id).get(this); 
     return map; 
    } 
+1

你敢打赌我这个答案 - 但这里只有一件事,你已经改变了getMap的访问私人。在问题中它是公开的,并且为了公开它可能需要在字段上调用setAccessible(true)。 –

+0

哦,是的,你是对的 –

+0

这是一个不错的选择。我想我会试试这个。 –

0

定义地图字符串,地图,并用它作为字典

,如:

private Map map1; 
private Map map2; 
private Map map3; 
private Map<String, Map> mapX; 

public Map getMap(String id) { 
    return this.mapX.getOrDefault(id, null); 
} 
0

如果你只有地图的几个数字,那么你可以使用switch语句和retuen地图上的哪个相匹配的地图名称,如下面的代码: -

switch (mapName) { 
      case "map1": 
       return map1; 
      break; 
      case "map2": 
       return map2; 
      break; 
     } 

但是如果你有大量的地图,那么它不如给一些ID或名字,对他们使用的地图的地图。

+0

不是很少。这是一个从Gson的json文件读取的属性类。每张地图都有一些配置信息。所以我可能会有数百个地图。 –

+0

@AlexanderRumanovsk,然后我建议最好使用Map of Map,其中关键是您想要返回的Map或id的名称。 –

2

地图地图可也正因为这个解决方案:在`地图[]

Map<String, Map<String, String>> map = new HashMap<>(); 

    map.put("map1", map1); 
    map.put("map2", map2); 

public static Map<String, String> getMap(String name){ 
    return map.get(name); 
}