我正在学习 ExecutorService 和 Callables,但收到来自 intelij 的警告,说我正在为此行进行未经检查的分配:
Future<OrderWorker<OfferType>> future = executorService.submit(new OrderWorker<OfferType>(anOfferSet));
我不知道如何正确分配。这是代码:
ExecutorService executorService = Executors.newCachedThreadPool();
List<Future<OrderWorker<OfferType>>> futures = new ArrayList<>();
for (OfferType anOfferSet : offerSet) {
// the next assignment is unchecked:
Future<OrderWorker<OfferType>> future = executorService.submit(new OrderWorker<OfferType>(anOfferSet));
futures.add(future);
}
订单 worker :
public class OrderWorker<I extends OfferType> implements DataWorker {
private Logger log = Logger.getLogger(OrderWorker.class);
private final OfferType offer;
public OrderWorker(I data) {
this.offer = data;
}
public OfferType getOffer() {
return offer;
}
@Override
public Object call() throws Exception {
Thread.sleep(5000);
log.info(offer.getListingPrice().getAmount());
return this;
}
}
DataWorker 接口(interface):
interface DataWorker<I extends OfferType> extends Callable<I> {}
OfferType
是一个简单的 POJO 类。
编辑
我在实现的时候也尝试过给DataWorker一个类型:
public class OrderWorker<I extends OfferType> implements DataWorker<I>
这给出了一个错误,说 OrderWorker 中的 call() 与 Callable 中的 call() 冲突 -> 不兼容的返回类型
我做错了什么,我必须做什么才能检查作业?
最佳答案
需要改变的是OrderWorker
的声明和call
的返回类型,如下:
public class OrderWorker<I extends OfferType> implements Callable<OrderWorker<I>> {
...
@Override
public OrderWorker<I> call() throws Exception {
...
}
}
关于java - ExecutorService 未经检查的分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39557518/