2012-03-06 2 views
3

Я храню двойное значение внутри в HashMap, как показаноJava: java.lang.Double не может быть приведен к java.lang.String

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

В дополнение к ответам на ваш вопрос, вы также можете прочитать учебник по дженерикам. http://docs.oracle.com/javase/tutorial/java/generics/index.html – Dunes

ответ

6

Вы навели на карту Double. Не накладывать на String сначала. Это будет работать:

HashMap<String, Double> listMap = new HashMap<String, Double>(); 
mvalue = listMap.get("mvalue"); 

Ваш примитивный двойник является автономным с двойным объектом. Используйте Generics, чтобы избежать необходимости бросать, что является частью <String, Double>.

0

Прежде всего, сделать HashMap с классами, определенными, как: HashMap<String,Double>

Во-вторых, это должно работать:

mvalue = Double.parseDouble(Double.toString(listMap.get("mvalue"))); 

Хотя, лучший способ:

mvalue = listMap.get("mvalue"); 
// provided defined HashMap is HashMap<String,Double> 
+0

если карта хранит двойное значение, то зачем ее анализировать? Здесь вы делаете 2 ненужных разбора. сначала дважды в строку, а затем снова строку, чтобы удвоить. –

+0

Несомненно, это работает, но зачем нужно переходить взад и вперед между String и Double, когда значение уже является Double? – claesv

+0

да, я знаю .. И я изменил свой ответ, чтобы удовлетворить его потребности .. но я хотел сказать @yyy i 777, как это сделать в этой ситуации .. !! –

2

Если вы вводите дженерики, вы сразу обнаружите проблему

Map<String, Double> listMap = new HashMap<String, Double>(); 
Double mvalue = listMap.get("mvalue"); 

Причина в том, что ваша карта делает возвращает Double, а не String, поэтому сообщение об ошибке.

0

попробовать это:

HashMap<String, Double> listMap = new HashMap<String, Double>(); 
Double mvalue = 0.0; 
listMap.put("mvalue", mvalue); 
mvalue = listMap.get("mvalue"); 
1

Я предполагаю, что ваша карта будет хранить много diferents типов Так что я рекомендую < String, Object > родовое

HashMap listMap = new HashMap<String, Object>(); 
double mvalue =0.0; 
listMap.put("mvalue",mvalue); 
. 
. 
. 
String mValueString = Double.toString((Double) listMap.get("mvalue")); 

Это поможет вам двойной объект, бросайте его Double и преобразование в строку в новую переменную.

0

Ваш код должен выглядеть так:

Обратите внимание, что если вам нужно получить обертку, а не примитивный тип, вы можете использовать на обертку классы XXX.valueOf() вместо XXX.parseXXX() который возвращает примитив.

0
mvalue = Double.parseDouble(String.valueOf(listMap.get("mvalue"))); 
Смежные вопросы