即使没有强制转换也会抛出ClassCastException

时间:2019-01-21 10:17:22

标签: java mongodb classcastexception objectid

我有一个HashMap<ObjectId, Integer>,我想在其中添加新条目。 ObjectIdBSON类的MongoDB-Driver类。

 1   @Expose private Map<ObjectId, Integer> usedPaths;
 2   
 3   public Project()
 4   {
 5      this.usedPaths = new HashMap<>();
 6   }
 7
 8   public void usePath(ObjectId someId, int pathId)
 9   {
10      this.usedPaths.put(someId, pathId);
11   }
12
13   public void debug()
14   {
15      usePath(new ObjectId("5bfd98a2c06178796e66c204"), 1);
16   }

当我调用debug方法时,会抛出ClassCastException

    SCHWERWIEGEND: Servlet.service() for servlet [Jersey Web Application] in context with path [/KnowledgerServer] threw exception [java.lang.ClassCastException:
org.bson.types.ObjectId cannot be cast to java.lang.String] with root cause
java.lang.ClassCastException: org.bson.types.ObjectId cannot be cast to java.lang.String
    at org.bson.BasicBSONObject.put(BasicBSONObject.java:36)
    at de.knowledger.model.Project.usePath(Project.java:10)
    at de.knowledger.model.Project.debug(Project.java:15)

据我所知,我什至不尝试将ObjectId强制转换为String,此外,我从未访问过代码中的BasicBSONObject类,ObjectId并未扩展它要么。

预先感谢:)

2 个答案:

答案 0 :(得分:1)

据我所知,您提供的代码没有错误。该异常清楚地表明该类是servlet的一部分。问题可能出在调用usePath(...)方法之前和之后发生了什么。

答案 1 :(得分:0)

问题是我试图将HashMap保存到MongoDB或从MongoDB加载HashMap,其Java驱动程序将所有传递的Map作为DBObject处理。

感谢您的提示!