我在HashMap中存储了一个double值,如图所示
HashMap listMap = new HashMap();
double mvalue =0.0;
listMap.put("mvalue",mvalue );
现在,当我尝试检索该值时,如图所示
mvalue = Double.parseDouble((String) listMap.get("mvalue"));
我收到错误
java.lang.Double无法强制转换为java.lang.String
我很困惑,
这是我的实际HashMap,我正在设置其中的值
HashMap listMap = new HashMap();
double mvalue =0.0 ;
List<Bag> bagList = null;
listMap.put("bagItems",bagList);
listMap.put("mvalue", mvalue);
有人可以告诉我,HashMap的结构应该如何?
答案 0 :(得分:6)
你在地图上放了一个Double。不要先转换为String。这将有效:
HashMap<String, Double> listMap = new HashMap<String, Double>();
mvalue = listMap.get("mvalue");
您的原始双精度正被自动装箱到双重对象。使用泛型可以避免强制转换,这是<String, Double>
部分。
答案 1 :(得分:2)
如果您介绍泛型,您将立即发现问题
Map<String, Double> listMap = new HashMap<String, Double>();
Double mvalue = listMap.get("mvalue");
原因是您的地图 会返回Double
而不是String
,因此会显示错误消息。
答案 2 :(得分:2)
我猜你的地图会存储很多不同的类型所以我推荐&lt; String,Object&gt;通用
HashMap listMap = new HashMap<String, Object>();
double mvalue =0.0;
listMap.put("mvalue",mvalue );
.
.
.
String mValueString = Double.toString((Double) listMap.get("mvalue"));
这将获得双重对象,将其转换为Double,并在新变量中转换为字符串。
答案 3 :(得分:1)
怎么样
mvalue = listMap.get("mvalue");
答案 4 :(得分:0)
首先,创建一个定义了类类型的HashMap,例如:HashMap<String,Double>
其次,这应该有效:
mvalue = Double.parseDouble(Double.toString(listMap.get("mvalue")));
虽然,最好的方法是:
mvalue = listMap.get("mvalue");
// provided defined HashMap is HashMap<String,Double>
答案 5 :(得分:0)
试试这个:
HashMap<String, Double> listMap = new HashMap<String, Double>();
Double mvalue = 0.0;
listMap.put("mvalue", mvalue);
mvalue = listMap.get("mvalue");
答案 6 :(得分:0)
您的代码应如下所示:
Map<String,Double> listMap = new HashMap<String,Double>();
double mvalue = 0.0;
listMap.put("mvalue", mvalue );
mvalue = Double.parseDouble( String.valueOf(listMap.get("mvalue")) );
请注意,如果需要检索包装器而不是基本类型,则可以使用包装类XXX.valueOf()而不是返回原语的XXX.parseXXX()。
答案 7 :(得分:0)
mvalue = Double.parseDouble(String.valueOf(listMap.get("mvalue")));