编程语言
首页 > 编程语言> > 如何在Java中为ReferenceQueue.remove()指定正确的类型?

如何在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&gt ;,而不是ReferenceQueue< WeakReference< V>>.您需要将从队列中拉出的引用显式转换为WeakReference< V>.

标签:weak-references,java
来源: https://codeday.me/bug/20191123/2065694.html