我有一组参数,以字符串形式存储在文件中:
param = value
我的程序读取这些值并将它们放入HashMap,其中“key”是文件中的param,值是对象。然后可以在程序中引用此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());
并且比其他人更“安全”吗?
答案 0 :(得分:1)
请勿直接使用React attempted to reuse markup in a container but the checksum was invalid
。用一个实现类似方法的类包装它:
HashMap
基本上,提供类似于public String getString(String name);
public int getInt (String name);
public double getDouble(String name);
的方式的类型化方法。
答案 1 :(得分:0)
我认为这里最好的方法是使用instanceof运算符检查类类型并根据它执行相应的操作(使用您的方法可能抛出ClassCastException或空指针异常,也不是所有的class将实现toString()方法。如果你将用户定义的类的实例作为一个值并且没有覆盖toString(),那么它将显示没有任何意义的字符串(例如Class @ 4324fas))。然后,如果你有太多的instanceof检查,那么你的代码看起来会很混乱(如果条件的话,那就太多了。)这是一个如何通过枚举实现的例子。
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;
}
对于上面的例子,我接受了this的引用,所以回答。