2016-09-18 38 views
3

我學習的ExecutorService和可調用,但是從intelij說我做這一行的選中分配得到一個警告:ExecutorService中選中分配

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); 
} 

令工人:

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 DataWorker<I extends OfferType> extends Callable<I> {} 

OfferType是一個簡單的POJO類。

編輯

我也試圖給DataWorker實現它當類型:

public class OrderWorker<I extends OfferType> implements DataWorker<I> 

這使得在與贖回()調用OrderWorker衝突的錯誤說調用() - >不兼容的返回類型

我在做什麼錯,我該怎麼做才能使作業檢查?

回答

1

你需要改變什麼是OrderWorker申報和call返回類型,如下:我想用於其他用途的接口,但在像接口擴展可贖回時

public class OrderWorker<I extends OfferType> implements Callable<OrderWorker<I>> { 
    ... 
    @Override 
    public OrderWorker<I> call() throws Exception { 
     ... 
    } 
} 
+0

'延伸Callable >'它的工作原理與您所描述的一樣!謝謝! –

+0

@ J.Doe好消息 –