我有以下代码:
map = db_.treeMapCreate(validMapName_)
.keySerializer(Serializer.LONG)
.valueSerializer(Serializer.LONG)
.make(); //mapDB
protected void onTaskCompletion(TaskInfo task)
{
long startBlk = task.blkId;
long count = task.count;
for (int i=0; i < count; ++i)
{
long blk = startBlk + i;
Long oldVal = map.get(blk); //NPE here
...
...
}
}
自动装箱时如何获得 NPE?我可以理解在拆箱时获得 NPE,即如果我有:
long oldVal = map.get(blk)
那么这可能会引发NPE。
编辑:地图不为空。更具体地说,在 mapDB 的 BTreeMap 代码中,执行以下行:
if(key==null) throw new NullPointerException();
万一有人想看看:mapDB Line: 1024的 BtreeMap
部分堆栈跟踪:
java.lang.NullPointerException
at org.mapdb.BTreeMap.get(BTreeMap.java:1024)
at org.mapdb.BTreeMap.get(BTreeMap.java:1013)
at com.service.onTaskCompletion(TaskHandler.java:312)
我无法重现它,所以我不能给出一个最小的、可验证的例子。我试图运行它,以便对不存在的密钥执行 get() ,并且它不会给出 NPE。