2017-07-27 148 views
0

嗨我想添加兩個編寫器到spring批處理compositeitemwriter。我收到一個錯誤說:Spring批處理CompositeItemWriter如何正確設置編寫代理

The method setDelegates(List<ItemWriter<? super MyObject>>) in the type CompositeItemWriter<MyObject> is not applicable for the arguments (List<ItemWriter<MyObject>>) 

我的代碼如下

public ItemWriter<MyObject> myWriter(){ 
    ItemWriter<MyObject> myWriter = new myWriter(); 
    return myWriter; 
} 

public ItemWriter<MyObject> myOtherWriter(){ 
    ItemWriter<MyObject> myOtherWriter = new MyOtherWriter(); 
    return myOtherWriter; 
} 

public CompositeItemWriter<MyObject> compositeItemWriter(){ 
    CompositeItemWriter<MyObject> writer = new CompositeItemWriter<MyObject>(); 
    List<ItemWriter<MyObject>> writerList = new ArrayList<ItemWriter<MyObject>>(); 
    writerList.add(myWriter()); 
    writerList.add(myOtherWriter()); 
    writer.setDelegates(writerList); //<-- ERROR HERE 
    return writer; 
} 

我無法找到未使用XML compositeitemwriters的任何強大的代碼示例。我知道我的錯誤與泛型類型參數有關,我對此一無所知。任何人都可以解釋爲什麼上述代碼不起作用,並可能如何補救? Multiple itemwriters in Spring batch這是我能找到的最接近的,但它使用的泛型也給我一個錯誤。

謝謝你的幫助!我是春季批次新手。

回答

0

嘗試修改...

List<ItemWriter<MyObject>> writerList = new ArrayList<ItemWriter<MyObject>>(); 

...有:

List<ItemWriter<? super MyObject>> writerList = new ArrayList<ItemWriter<? super MyObject>>(); 

CompositeItemWriter#setDelegates採取的形式List<ItemWriter<? super T>>列表。

請參閱spring documentation