在我的代码中,我向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!
答案 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);
我希望这能解决你的问题。