【问题标题】:Extending interfaces and conversion errors in Java在 Java 中扩展接口和转换错误
【发布时间】:2012-08-20 12:52:39
【问题描述】:

我正在尝试实现“PriorityThreadPoolExecutor”。

所以我声明了执行者:

static ThreadPoolExecutor threadPool =  
                new ThreadPoolExecutor(2, 100, 100, TimeUnit.SECONDS, queue); 

优先级的关键是队列参数。基本上我需要一个 PriorityBlockingQueue 所以我使用构造函数:

PriorityBlockingQueue(int initialCapacity, Comparator<? super E> comparator);
queue = new PriorityBlockingQueue<mRunnable>(10,
        new Comparator<mRunnable>() {

            @Override
            public int compare(mRunnable lhs, mRunnable rhs) {
                return rhs.getPriority()-lhs.getPriority();
            }
        });

mRunnable 在哪里:

public interface mRunnable extends Runnable {
    public int getPriority();
}

但是编译器在这里抱怨:

Type mismatch: cannot convert from PriorityBlockingQueue<mRunnable> 
       to PriorityBlockingQueue <Runnable>

我不明白为什么当 mRunnable 扩展 Runnable 时会发生此错误。

我可以修补它来改变比较器:

new Comparator<Runnable>() {

    @Override
    public int compare(Runnable lhs, Runnable rhs) {
        if (lhs instanceof mRunnable && rhs instanceof mRunnable){
        return ((mRunnable)rhs).getPriority()-((mRunnable)lhs).getPriority();
        }
        return 0;
    }
});

但恕我直言,这是一个丑陋的解决方案。

您能解释一下为什么会发生类型不匹配吗?谢谢

【问题讨论】:

    标签: java android


    【解决方案1】:

    由于不同的泛型类型而发生类型不匹配,您应该将引用类型从PriorityBlockingQueue&lt;Runnable&gt; 更改为PriorityBlockingQueue &lt;mRunnable&gt;。 或者PriorityBlockingQueue&lt;? extends Runnable&gt;,例如。

    【讨论】:

    猜你喜欢
    • 2018-11-28
    • 2016-04-26
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 2019-03-21
    • 2019-10-14
    相关资源
    最近更新 更多