Java:java.lang.Double无法强制转换为java.lang.String

时间:2012-03-06 11:40:55

标签: java

我在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的结构应该如何?

8 个答案:

答案 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")));
相关问题