没有使用类的ClassCastException?

时间:2013-12-23 20:46:46

标签: java classcastexception

我有一个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转换为布尔值?我正在向对象投射布尔值!

3 个答案:

答案 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的看法是什么吗?