如何在Java中为ReferenceQueue.remove()指定正确的类型?
作者:互联网
我有一个带有WeakReferences的ReferenceQueue的类.
class Example<K,V>
{
ReferenceQueue<WeakReference<V>> queue = null;
Thread cleanup = null;
[...]
Example () {
queue = new ReferenceQueue<WeakReference<V>>();
cleanup = new Thread() {
public void run() {
try {
for (;;) {
WeakReference<V> ref = queue.remove();
[...]
但是当我尝试对此进行编译时,出现“不兼容类型”错误:
found : java.lang.ref.Reference<capture#189 of ? extends java.lang.ref.WeakReference<V>>
required: java.lang.ref.WeakReference<V>
WeakReference<V> ref = queue.remove();
^
我不明白这一点,因为我已将引用队列定义为V的弱引用队列,因此我期望由于remove()而导致V的弱引用.
错了吗我怎样才能解决这个问题?
我也尝试了Reference< V>作为remove()的返回值,但这没有帮助.我尝试将结果转换为结果,但这只会将错误变成警告.
解决方法:
您应该使用ReferenceQueue< V> ;,而不是ReferenceQueue< WeakReference< V>>.您需要将从队列中拉出的引用显式转换为WeakReference< V>.
标签:weak-references,java 来源: https://codeday.me/bug/20191123/2065694.html