簡體   English   中英

從HashMap中提取值<String, Object>

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM