[英]Extracting values from HashMap<String, Object>
我有一組參數,以字符串形式存儲在文件中,形式為:
param = value
我的程序讀取這些值,並將它們放入HashMap,其中“鍵”是文件中的參數,而值是對象。 然后,可以在程序中引用該HashMap,並且最終將更改后的值重新寫到文件中。 訪問是快速的(與磁盤訪問相反,因為磁盤訪問是在某些非常老(慢)的硬件上運行的。
選擇HashMap是因為一些值是字符串,其他值是整數,雙精度數和最終列表。 將值放在Map中時,將執行從字符串到int,double等的轉換。 由於通常首先手動創建參數文件,並且可以不時手動修改參數文件,因此可以進行前期檢查。
當從HashMap中提取數據時,我的代碼開始看起來非常混亂,因為現在我必須強制轉換所有內容或進行轉換。 即使是簡單的String(在文件中約占我的值的90%)看起來也很糟糕。 例如,如果我有對字符串執行一些處理的方法:
public void pString(String x) {
// do something with 'x'
}
並且我有以下定義:
HashMap<String, Object> parmsMap = new HashMap<String, Object>();
parmsMap.put("wait", 300); // integer value
parmsMap.put("title", "File Access"); // string value
我必須通過以下方式之一調用pString:
pString((String)parmsMap.get("title"));
pString(parmsMap.get("title").toString());
這些都不是很清楚!
現在我知道可以將parmsMap更改為:
HashMap<String, String> parmsMap = new HashMap<String, String>();
而我90%的電話是:
pString(parmsMap.get("title"));
麻煩的少得多。
但是,這意味着我每次想訪問它們時都必須檢查/轉換所有“非字符串”項!
有沒有更好的辦法? 如果沒有,哪種方法將減少性能損失?
pString((String)parmsMap.get("title"));
要么
pString(parmsMap.get("title").toString());
並且一個在本質上比另一個更“安全”嗎?
不要直接使用HashMap
。 用實現以下方法的類包裝它:
public String getString(String name);
public int getInt (String name);
public double getDouble(String name);
基本上,提供與ResultSet
相似的類型化方法。
我認為最好的方法是使用instanceof運算符檢查類的類型,並根據其執行適當的操作(使用您的方法可能會拋出ClassCastException或null指針異常,而且,並非所有的類都具有toString()方法如果將用戶定義類的實例作為值,並且沒有覆蓋toString(),則它將顯示沒有任何含義的字符串(例如Class @ 4324fas)。 再一次,如果您有太多的instanceof檢查,那么您的代碼將顯得凌亂(如果條件太多,則if..else)。 這是一個如何通過枚舉實現的示例。
public A() {
CLAZZ z = CLAZZ.valueOf(this.getClass().getSimpleName());
switch (z) {
case A:
doA();
break;
case B:
doB();
break;
case C:
doC();
break;
}
}
enum CLAZZ {
A,B,C;
}
對於上面的示例,我參考了這個答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.