我有一个HashMap<Integer, Object>
并且我有一个getter功能:
public Boolean getBoolean(int index){
return (boolean) watcherMap.get(index);
}
调用此类时,我收到此错误
Exception in thread "Thread-0" java.lang.ClassCastException: java.lang.String cannot be cast to
java.lang.Boolean
at com.vobis.onebullet.entity.DataWatcher.getBoolean(DataWatcher.java:36)
at com.vobis.onebullet.entity.Entity.updateLocally(Entity.java:91)
at com.vobis.onebullet.level.Level.updateLevel(Level.java:149)
at com.vobis.onebullet.OneBullet.loop(OneBullet.java:264)
at com.vobis.onebullet.OneBullet.start(OneBullet.java:228)
at com.vobis.onebullet.OneBullet.run(OneBullet.java:125)
at java.lang.Thread.run(Unknown Source)
但是我没有在该函数中将String转换为布尔值?我正在向对象投射布尔值!
答案 0 :(得分:4)
您正在将一个Object转换为布尔值,该对象是java.lang.String
的实例。
这意味着你在某个地方放
watcherMap.put(someInteger,"SomeString");
getBoolean(someInteger);
这将抛出ClassCastException
答案 1 :(得分:0)
似乎Hashmap在它抛出此异常的情况下存储(Integer,String)。请记住Object是Java中的父类,因此它的引用可以包含任何对象。
答案 2 :(得分:0)
如果你保持
,不会有任何错误watcherMap.put(1, true);
或类似
watcherMap.put(2, Boolean.FALSE)
但如果你说
,肯定是个问题watcherMap.put(1, "true");
你能告诉我们你对watcherMap的看法是什么吗?