Ho una variazione del seguente codice:Come posso rendere compatibile il mio codice generico con questa firma del metodo?
package com.test.package;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.PriorityBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class TestClass {
public static class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Called");
}
}
public void method() {
PriorityBlockingQueue<MyRunnable> queue = new PriorityBlockingQueue<MyRunnable>();
method2(queue);
}
public void method2(BlockingQueue<? extends Runnable> queue) {
System.out.println(queue);
// Getting error here because BlockingQueue<? extends Runnable> is not a
// subtype of BlockingQueue<Runnable>.
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(200, 200, 0L,
TimeUnit.MILLISECONDS, queue);
}
}
E come potete vedere, la mia coda non è compatibile con il costruttore ThreadPoolExecutor
. C'è un modo per ovviare a questo rispetto a trasmettere la mia coda a (BlockingQueue<Runnable>)
? Ovviamente non posso applicare la libreria standard Java.
Perché stai utilizzando 'BlockingQueue' in primo luogo? –
Perché ho determinati runnables con priorità più alta. Ho saltato la parte di confronto nel mio esempio, perché non è correlata alla mia domanda. – Ztyx
Se non è correlato, forse potresti semplicemente usare 'PriorityBlockingQueue'? Non è come se PriorityBlockingQueue smettesse di ordinarli se lo fai. –