gpt4 book ai didi

java - Java 中自动装箱时的 NPE

转载 作者:行者123 更新时间:2023-12-01 21:56:47 24 4
gpt4 key购买 nike

我有以下代码:

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。

编辑: map 不为空。更具体地说,在mapDB的BTreeMap代码中,执行了这一行:

if(key==null) throw new NullPointerException();

如果有人想看一下:BtreeMap of mapDB线路:1024

部分堆栈跟踪:

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)

我无法重现它,所以我无法给出一个最小的、可验证的例子。我尝试运行它,以便对不存在的 key 执行 get(),但它不会给出 NPE。

最佳答案

我认为问题在于您正在查看错误版本的 BTreeMap 代码。如果您返回previous commit of this class ,第 1024 行不是:

if(key==null) throw new NullPointerException();

但是:

while(!A.isLeaf()) {...}

其中 A 设置为:

BNode A = engine.get(current, nodeSerializer);

这更有意义。基本上,null 是从 engine.get 返回的。这是如何可能的超出了我的理解,但这很可能是mapdb本身的一个错误。

关于java - Java 中自动装箱时的 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34167648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com