HashMap ClassCastException MyClass的字符串

时间:2015-07-22 07:16:29

标签: java loops hashmap jira-plugin

我想迭代一个HashMap。

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对象的引用,如&#34; MyClass @ 9d5f8e&#34;

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

但是只要我想访问这个对象的数据,它就会被转换为MyClass,这应该没问题但是不是。看起来这个对象实际上是一个String,因为我得到了这个例外:

java.lang.ClassCastException:java.lang.String无法强制转换为MyClass

我不明白。 我多次传递HashMap,SettingsClass将存储的对象强制转换为HashMap。如果我打印了值,我会得到对MyClass的引用,但只要我想访问它中的数据,JRE就认为它是一个String对象。

1 个答案:

答案 0 :(得分: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