2012-07-28 80 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

相關問題