我在类中有一堆地图,我想制作一个通用方法来检索与ID匹配的特定地图。 喜欢的东西:检索与字符串名称相同的变量
private Map map1;
private Map map2;
private Map map3;
public Map getMap(String id){
return mapX;
}
当我调用该方法为:
getMap("map1");
它将返回MAP1。 任何方式我可以做这个转换而不创建地图的地图?
我在类中有一堆地图,我想制作一个通用方法来检索与ID匹配的特定地图。 喜欢的东西:检索与字符串名称相同的变量
private Map map1;
private Map map2;
private Map map3;
public Map getMap(String id){
return mapX;
}
当我调用该方法为:
getMap("map1");
它将返回MAP1。 任何方式我可以做这个转换而不创建地图的地图?
尝试使用反射,例如:
private Map getMap(String id) throws NoSuchFieldException, IllegalAccessException {
getClass().getField("map" + id).get(this);
return map;
}
你敢打赌我这个答案 - 但这里只有一件事,你已经改变了getMap的访问私人。在问题中它是公开的,并且为了公开它可能需要在字段上调用setAccessible(true)。 –
哦,是的,你是对的 –
这是一个不错的选择。我想我会试试这个。 –
定义地图字符串,地图,并用它作为字典
,如:
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);
}
如果你只有地图的几个数字,那么你可以使用switch语句和retuen地图上的哪个相匹配的地图名称,如下面的代码: -
switch (mapName) {
case "map1":
return map1;
break;
case "map2":
return map2;
break;
}
但是如果你有大量的地图,那么它不如给一些ID或名字,对他们使用的地图的地图。
不是很少。这是一个从Gson的json文件读取的属性类。每张地图都有一些配置信息。所以我可能会有数百个地图。 –
@AlexanderRumanovsk,然后我建议最好使用Map of Map,其中关键是您想要返回的Map或id的名称。 –
地图地图可也正因为这个解决方案:在`地图[]
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);
}
使用工厂设计模式 – sForSujit
存储它们'数组并通过索引检索它们? – assylias
不知道这是否明智的做法,为什么外部*代码知道内部使用的名称? –