2012-07-28 49 views
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条件,然后检查和更新一样。

我想知道的是下面的

正如我刚才所说,我送的程序,它是文件名“字符串的文件名”有“地图猴子”的名称相同,但前者是一个字符串,后者是地图。 我想知道我是否可以使用字符串变量作为地图实例的引用,因为它们都具有相同的名称。这将高度避免,如果条件,我在程序中使用,因此我想可能的解决方案...有关任何与类型框架ort

+2

首先,'='不是一个比较,而是一个赋值。第二:使用''monkey'.equals(fileName)'进行字符串比较。 – Baz 2012-07-28 19:19:24

回答

0

想法是将它们在一个地图,并使用文件名,例如一键

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(); 

} 

所以你将有一个实施每个案件(设置,地图,表格...),并将其以文件名作为关键字与地图相关联。

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使用文件名作为关键字在地图上,并调用与记录实施update方法(这可能是一个String,复杂Object)等。当你需要从那里读取一些东西时,你可以使用list方法。

2

您需要另一个Map - 其关键是String,值是Map。类似于Map<String,Map> allMaps = new HashMap<String,Map>()

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

allMaps .put("monkey", monkey)

如果字符串的文件名对应不map而是一个set,那么你需要声明的东西更普遍Map<String,Object> allMaps = new HashMap<String,Object>()。当然这意味着你需要把价值转化为它的特殊类型,然后才能用它做任何有意义的事情。

然后,使用此地图,用你的文件名参数

Map monkeyAgain = allMaps.get(filename)

1

您可以使用反射:

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

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

+0

+1“这不是正确的做法。” OP在这里真的应该重新考虑这个设计。 – 2012-07-28 19:36:20

相关问题