即使元素存在,HashMap.get()也返回null

时间:2015-02-24 12:42:27

标签: java

在我的代码中,我向HashMap添加一个条目。稍后,当尝试通过其键获取元素时,它将返回null。

无法发布图片,但经过调试后,这就是它所说的:

http://i.imgur.com/prvtRB9.png http://i.imgur.com/z7fz6cP.png

请帮我解决这个非常奇怪的错误!

编辑:自从您请求以来,这些是addEntry()和getEntry()方法以及调用它们的代码中的位置:

backgroundActor = new BackgroundActor(new BackgroundGraphicsComponent());
backgroundActors.addEntry(backgroundActor, "Background");
borderActor = new BorderActor(new BorderPhysicsComponent(), new BorderGraphicsComponent());
backgroundActors.addEntry(borderActor, "Border");

@SuppressWarnings("unchecked")
    @Override
    public T getEntry(String key) {
        if (gameObjects.get(key) != null) {
            return (T) gameObjects.get(key);
        }
        else throw new NullPointerException(); // this is where it fails
    }

    @Override
    public void addEntry(T gameObject, String key) {
        if (gameObject != null) gameObjects.put(gameObject, key);
        else throw new NullPointerException();
    }

EDIT2:已解决。问题在于HashMap的put()方法,它将第一个参数作为键,然后是值。 感谢Nizil和user1498360!

2 个答案:

答案 0 :(得分:4)

put的{​​{1}}方法将键作为第一个参数,然后是值。

所以在你的Map方法中,你应该这样做:

addEntry

而不是

gameObjects.put(key, gameObject);

这解释了为什么调试器打印gameObjects.put(gameObject, key); 而不是{BackgroundActor=Background, BorderActor=Border}

答案 1 :(得分:1)

请更改:

if (gameObject != null) gameObjects.put(gameObject, key);

为:

if (gameObject != null) gameObjects.put(key, gameObject);

我希望这能解决你的问题。