cqengine IndexedCollection add导致nullpointer

时间:2016-11-03 15:56:37

标签: java cqengine

当我向IndexedCollection添加元素时,我当前收到此错误:

HIGHEST: null
java.lang.NullPointerException
    at java.util.concurrent.ConcurrentSkipListMap.doGet(ConcurrentSkipListMap.java:778)
    at java.util.concurrent.ConcurrentSkipListMap.get(ConcurrentSkipListMap.java:1546)
    at com.googlecode.cqengine.index.support.AbstractMapBasedAttributeIndex.addAll(AbstractMapBasedAttributeIndex.java:81)
    at com.googlecode.cqengine.engine.CollectionQueryEngine$12.perform(CollectionQueryEngine.java:1125)
    at com.googlecode.cqengine.engine.CollectionQueryEngine.forEachIndexDo(CollectionQueryEngine.java:1206)
    at com.googlecode.cqengine.engine.CollectionQueryEngine.addAll(CollectionQueryEngine.java:1122)
    at com.googlecode.cqengine.ConcurrentIndexedCollection.add(ConcurrentIndexedCollection.java:351)

我已经尝试调试,看看我是否传递了空值,但我不是。我正在尝试添加的对象具有null DateTime,但是当它为null时,相应的索引已经返回null。

我认为这个解决方案最终归结为经验,@ ngcall你有没有遇到过这个问题,如果是这样的话你是怎么解决的?

1 个答案:

答案 0 :(得分:1)

我认为该领域的网站上的文档缺乏。它提到SimpleNullableAttributeMultiValueNullableAttribute,但没有真正解释何时使用它们。

TL; DR 是:如果你得到一个NPE,通常意味着你需要使用一个可以为空的属性。

或者更确切地说:如果您的数据可能包含空值,那么您需要使用可空属性(例如SimpleNullableAttribute)而不是非可空属性(例如SimpleAttribute

无论如何,我已经扩展了主Readme.md上的文档来讨论" Null值"更详细。希望有所帮助!