2015-07-22 1 views
1

Я хочу перебирать HashMap.HashMap ClassCastException String для MyClass

public void setMyHashMap(final String key, 
     final HashMap<Integer, MyClass> value) throws NullPointerException{ 
     settings.put(key, value); 
} 

public HashMap<Integer, MyClass> getMyHashMap(String key) { 
    return (HashMap<Integer, MyClass>) settings.get(key); 
} 
------------------------------------------------------------ 
for (Map.Entry<Integer, MyClass> e : settings.getMyHashMap(key) 
              .entrySet()) { 
    System.out.println(e.getValue()); 
} 

Это отображает ссылку на объект MyClass, как «MyClass @ 9d5f8e»

for (Map.Entry<Integer, MyClass> e : settings.getMyHashMap() 
              .entrySet()) { 
    System.out.println(e.getValue().getLabel()); 
} 

Но как только я хочу, чтобы получить доступ к данным этого объекта, он получает отлиты к MyClass, который должен хорошо, но нет. Кажется, что если объект на самом деле строка, как я получаю это исключение:

java.lang.ClassCastException: java.lang.String не может быть приведен к MyClass

Я не понимаю. Я передаю HashMap несколько раз, и SettingsClass без проблем запускает сохраненный объект в HashMap. Если я напечатаю значение, я получаю ссылку на MyClass, но как только я хочу получить доступ к данным, JRE считает, что это объект String.

+0

'System.out.println (e.getValue(). GetClass()); '? – immibis

+0

подробнее о вашем кодовом коде – codeaholicguy

+0

Ваша карта 'settings', вероятно, имеет значения типов карт типа« HashMap ». – Codebender

ответ

0

Ваш код должен работать - я просто попытался это:

class MyClass { 
    public String foo; 
    public String bar; 

    public String getLabel() { 
     return "foo: " + foo + ", bar: " + bar; 
    } 
} 

MyClass myObj1 = new MyClass(); 
myObj1.foo = "foo1"; 
myObj1.bar = "bar1"; 

MyClass myObj2 = new MyClass(); 
myObj2.foo = "foo2"; 
myObj2.bar = "bar2"; 

java.util.Map<Integer, MyClass> myHashMap = new java.util.HashMap<Integer, MyClass>(); 
myHashMap.put(1, myObj1); 
myHashMap.put(2, myObj2); 

for (java.util.Map.Entry<Integer, MyClass> e : myHashMap.entrySet()) { 
    System.out.println(e.getValue().getLabel()); 
} 

Это произвело выход (как и ожидалось):

foo: foo1, bar: bar1 
foo: foo2, bar: bar2 
+0

СЛЕДУЕТ работать, вот что я думаю, но, по-видимому, это не так. – Don

+0

Можете ли вы отладить код и посмотреть, что на самом деле находится на карте во время выполнения? – nutfox

 Смежные вопросы

  • Нет связанных вопросов^_^