java - ExecutorService 未经检查的分配

标签 java multithreading generics executorservice

我正在学习 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/

相关文章:

Java - 将对象列表映射到具有其属性属性值的列表

带线程的 C++ 网络类

c - 消息队列中的输出被更改/截断

c# - WebJob 依赖注入(inject)绑定(bind)到通用类

c# - 如何设置类型为列表的泛型约束?

java - 什么是原始类型,为什么我们不应该使用它呢?

java - 使用 Elasticsearch 的 Java High Level Rest Client 收到异步请求的响应后立即返回某些内容

java - 在方法中返回另一个类的方法。导致 java.lang.NullPointerException

java - 如何检测请求的 URL 是否包含查询字符串?

c# - 多线程与数据库