Java 检索与字符串同名的变量

Java 检索与字符串同名的变量,java,dictionary,Java,Dictionary,我在一个类中有一堆映射,我想创建一个通用方法来检索与ID匹配的特定映射。 比如: private Map map1; private Map map2; private Map map3; public Map getMap(String id){ return mapX; } 当我将该方法调用为: getMap("map1"); 它将返回map1。 在不创建地图的情况下,我是否可以进行这种转换?定义一个字符串地图,映射并将其用作字典 比如: 私有地图map1; 私有地图map2;

我在一个类中有一堆映射,我想创建一个通用方法来检索与ID匹配的特定映射。 比如:

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


public Map getMap(String id){
  return mapX;
}
当我将该方法调用为:

getMap("map1");
它将返回map1。
在不创建地图的情况下,我是否可以进行这种转换?

定义一个字符串地图,映射并将其用作字典

比如:

私有地图map1;
私有地图map2;
私人地图map3;
私有地图mapX;
公共映射getMap(字符串id){
返回此.mapX.getOrDefault(id,null);
}

定义字符串映射,映射并将其用作字典

比如:

私有地图map1;
私有地图map2;
私人地图map3;
私有地图mapX;
公共映射getMap(字符串id){
返回此.mapX.getOrDefault(id,null);
}

如果您只有少量映射,则可以使用switch语句并重新发送与映射名称匹配的映射,如下面的代码所示:-

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

但是,如果您有大量映射,则最好为它们指定一些id或名称,并使用Map of Map。

如果您只有少量映射,则可以使用switch语句并返回与映射名称匹配的映射,如以下代码所示:-

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

但是,如果您有大量的贴图,那么最好为它们指定一些id或名称,并使用Map of Map。

尝试使用反射,例如:

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

尝试使用反射,例如:

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

Map of Map也可以是解决此问题的解决方案:

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);
}
Map Map=newhashmap();
map.put(“map1”,map1);
map.put(“map2”,map2);
公共静态映射getMap(字符串名称){
返回map.get(name);
}

地图地图也可以解决此问题:

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);
}
Map Map=newhashmap();
map.put(“map1”,map1);
map.put(“map2”,map2);
公共静态映射getMap(字符串名称){
返回map.get(name);
}

使用factory design Pattern将它们存储在
映射[]数组中并按索引检索它们?不确定这样做是否明智,为什么外部代码应该知道内部使用的名称?使用factory design Pattern将它们存储在
映射[]数组中并按索引检索它们?不确定这样做是否明智,为什么外部代码应该知道内部使用的名称?其实不多。这是一个使用Gson从json文件读取的属性类。每个地图都有一些东西的配置信息。所以我可能有数百张地图。@AlexanderRumanovsk,然后正如我建议的那样,最好使用Map of Map,其中键是您想要返回的地图的id或名称。不是很少。这是一个使用Gson从json文件读取的属性类。每个地图都有一些东西的配置信息。所以我可能有数百张地图。@AlexanderRumanovsk,然后正如我建议的那样,最好使用Map of Map,其中的键是您想要返回的地图的id或名称。您和我打赌这个答案-但这里只有一件事,您已将getMap的访问权限更改为private。在这个问题上,它是公共的,为了使它公开,可能有必要在字段上调用setAccessible(true)。你和我打赌这个答案-但这里只有一件事,你已经将getMap的访问权限更改为private。在这个问题上,它是公共的,为了使它公开,可能需要在字段上调用setAccessible(true)。