gpt4 book ai didi

java - 如果类型删除允许我只调用 Object() 方法,我如何调用 ReferenceQueue 中项目的方法?

转载 作者:行者123 更新时间:2023-11-29 05:39:56 25 4
gpt4 key购买 nike

我有一个引用队列,声明为:

ReferenceQueue<MapChunk> rqueue = new ReferenceQueue<>();

我有一些软引用以

的形式构造
SoftReference ref=new SoftReference<MapChunk>(ourChunk, rqueue);

根据文档,rqueueReferenceQueue<? extends MapChunk>

我希望在他们的垃圾收集上调用处理程序,这就是我将他们放入队列的原因。但是,当我开始从另一个线程处理队列时,我通过

从队列中检索对象
Reference ref=rqueue.poll();
synchronized (chunks) {
synchronized (MapDatabase.class) {
chunks.put(ref.get().getPosition(), ref.get());
}
}

我的编译器错误表明发生了类型删除,我得到了 ref.get()作为一个对象(由于队列的原始类型)。我既不能在我需要的对象上调用方法,也不能将它传递给需要 MapChunk 的方法。本身。当然,这阻碍了引用队列的许多使用,在这种情况下我可能做错了什么。我确定我只会得到 MapChunk运行时的对象,所以我应该使用强制转换吗?做点别的?根本不使用引用队列?

编辑:如果我使用 Reference<MapChunk> ref=rqueue.poll()我得到以下信息:

cannot convert from Reference<capture#1-of ? extends MapChunk> to Reference<MapChunk>

当我使用 Reference<? extends MapChunk> ref=rqueue.poll(); 时该行的错误已解决,但当我尝试使用 ref 时出现另一个错误:

The method addMapChunk(Position, SoftReference<MapChunk>) in the type HashMap<Position,SoftReference<MapChunk>> is not applicable for the arguments (Position, capture#3-of ? extends MapChunk).

编辑:我猜这只是一个错误消息,因为当另一个错误被修复时类型确实转换正确。

最佳答案

如果您不想类型删除,请不要删除类型。

Reference<? extends MapChunk> ref = rqueue.poll();
MapChunk mc = ref.get();

关于java - 如果类型删除允许我只调用 Object() 方法,我如何调用 ReferenceQueue 中项目的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18000316/

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