0

我正在使用一个类,我将输入作为文件名和文件位置。我有一个预定义的文件名,所以我会将预定义的文件名与我收到的文件名匹配,然后相应地存储值。请看下面的代码

//Set of storage maps and tables 
public class storage
{
//Storage set
public static Set<Integer> tiger = new HashSet<Integer>();

//Storage set
public static Set<Integer> lion = new HashSet<Integer>();

//This is the table used for storing the browser customer count  
public static Table<String,String,Integer> elephant = HashBasedTable.create(); 

//Storage map 
public static Map<String, String> monkey = new HashMap<String, String>();


public static void storeDataDirector(String fileLocation,String fileName) throws     Exception 
{
    if (fileName = monkey) 
                **update the "monkey map"**

}

这是我的问题,我还有很多地图和表格要使用,所以我不能使用多个 if 条件然后检查和更新它们。

我想知道的是以下

正如我之前所说,我发送给程序的文件名“字符串文件名”与“地图猴子”的名称相同,但前者是字符串,后者是地图。我想知道是否可以使用字符串变量作为对地图实例的引用,因为它们都具有相同的名称。这将高度避免我在程序中使用的 if 条件,因此我想为此提供可能的解决方案......与类型大小写 ort 相关的任何内容

4

3 回答 3

2

你需要有另一个Map- 其键是 aString和值是 a Map。就像是Map<String,Map> allMaps = new HashMap<String,Map>()

一旦你有了这张地图,用你所有的文件名和相应的地图填充它monkey

allMaps .put("monkey", monkey)

如果字符串文件名对应的不是 amap而是 a set,那么您需要声明一些更通用的内容Map<String,Object> allMaps = new HashMap<String,Object>()。当然,这意味着您需要先将值转换为特定类型,然后才能对它做任何有意义的事情。

然后,要使用此映射,请使用您的文件名参数

Map monkeyAgain = allMaps.get(filename)

于 2012-07-28T19:29:27.437 回答
1

您可以使用反射:

Storage.class.getField(fileName).get(null)

您仍然必须转换返回的对象。我不认为这是正确的做法。

于 2012-07-28T19:29:49.927 回答
0

这个想法是将它们关联到一个 Map 中,并使用文件名作为键,例如

Map<String, Map<String, String>>
//  file    store structure

如果您需要一个通用的解决方案,您可以通过实现商店结构的抽象来解决这个问题,方法是实现类似于此的接口:

// T is the store type and U is the original type (String from file for instance...)
public interface StoreUnit<T, U> {

    void update(U record);

    List<T> list();

}

因此您将为每种情况(Set,Map,Table ...)提供一个实现,并将使用文件名作为键将其关联到一个映射中。

monkeyFileName => MapStoreUnit<Entry<String,String>,String>
tigerFileName => SetStoreUnit<Integer, String>
elephantFileName => TableStoreUnit<Entry<Entry<String,String>,String>,String> // not sure if for Table there is something better than Entry ;)

当您想更新某个商店时,您可以get使用文件名作为键在地图上执行 a ,并调用update使用记录实现的方法(可能是String, complex Object)等等。当您需要从那里读取某些内容时,您可以使用该list方法。

于 2012-07-28T19:23:38.283 回答