Я использую код ThreadPoolExecutor
в некотором коде, и я снабжаю его BlockingQueue<Runnable>
. Я получаю ошибку компилятора: can't resolve constructor
. Поэтому я попробовал лить queue
явно BlockingQueue<Runnable>
. Тем не менее, я получаю ошибку компилятора по конструктору ThreadPoolExecutor
«s:Java BlockingQueue <Runnable> Неконвертируемые типы
Inconvertible types, cannot cast PriorityBlockingQueue<MyRunnable> to BlockingQueue<Runnable>
Это происходит, даже если PriorityBlockingQueue
орудия BlockingQueue
и MyRunnable
орудия Runnable
. Я использую Java 7 на Android.
Код:
public class Test {
PriorityBlockingQueue<MyRunnable> queue = new PriorityBlockingQueue<>(...);
//compiler error without cast
ThreadPoolExecutor executor = new ThreadPoolExecutor(..., queue, ...);
//compiler error with cast
ThreadPoolExecutor executor = new ThreadPoolExecutor(..., (BlockingQueue<Runnable> queue, ...);
public static class MyRunnable implements Runnable {...}
Временное решение:
Для того, чтобы получить его для компиляции, я изменил оттенок на (BlockingQueue)
, но я получаю неконтролируемой случай предупреждение (который Я подавил). Я знаю, что могу сделать queue
a BlockingQueue<Runnable>
, но тогда мне нужно бросить кучу мест по всему моему коду, который я бы предпочел не делать.
Есть ли что-то, что мне не хватает, или это непроверенное предупреждение - мой лучший выстрел.
Обратите внимание на разницу между 'BlockingQueue' и 'BlockingQueue extends Runnable> '. Очередь, которую вы поставляете, совместима только с одним из них. –
Ordous