Tôi có một biến thể của mã sau:Làm thế nào tôi có thể làm cho mã generics của tôi tương thích với chữ ký phương thức này?
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);
}
}
Và như bạn có thể thấy, hàng đợi của tôi là không tương thích với các nhà xây dựng ThreadPoolExecutor
. Có cách nào để làm việc xung quanh này hơn là xếp hàng đợi của tôi đến (BlockingQueue<Runnable>)
? Tôi rõ ràng không thể vá Java Standard Library.
Tại sao bạn sử dụng 'BlockingQueue 'ở địa điểm đầu tiên? –
Bởi vì tôi có các runnables nhất định với mức độ ưu tiên cao hơn. Tôi bỏ qua phần so sánh trong ví dụ của tôi, bởi vì nó không liên quan đến câu hỏi của tôi. – Ztyx
Nếu nó không liên quan, có thể bạn chỉ cần sử dụng 'PriorityBlockingQueue'? Nó không giống như 'PriorityBlockingQueue' sẽ ngừng phân loại chúng nếu bạn làm điều đó. –