繁体   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