Skip to content

Commit 1021416

Browse files
quafffmbenhassine
authored andcommitted
Refine ChunkOrientedStepBuilder to fix generics
Closes GH-5358 Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
1 parent 65e85d0 commit 1021416

2 files changed

Lines changed: 15 additions & 13 deletions

File tree

spring-batch-core/src/main/java/org/springframework/batch/core/step/builder/ChunkOrientedStepBuilder.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,17 +71,18 @@
7171
* to provide common properties and methods for building chunk-oriented steps.
7272
*
7373
* @author Mahmoud Ben Hassine
74+
* @author Yanming Zhou
7475
* @since 6.0
7576
*/
7677
public class ChunkOrientedStepBuilder<I, O> extends StepBuilderHelper<ChunkOrientedStepBuilder<I, O>> {
7778

7879
private final int chunkSize;
7980

80-
private @Nullable ItemReader<I> reader;
81+
private @Nullable ItemReader<? extends I> reader;
8182

82-
private @Nullable ItemProcessor<I, O> processor;
83+
private @Nullable ItemProcessor<? super I, ? extends O> processor;
8384

84-
private @Nullable ItemWriter<O> writer;
85+
private @Nullable ItemWriter<? super O> writer;
8586

8687
private PlatformTransactionManager transactionManager = new ResourcelessTransactionManager();
8788

@@ -155,7 +156,7 @@ protected ChunkOrientedStepBuilder<I, O> self() {
155156
* @param reader an item reader
156157
* @return this for fluent chaining
157158
*/
158-
public ChunkOrientedStepBuilder<I, O> reader(ItemReader<I> reader) {
159+
public ChunkOrientedStepBuilder<I, O> reader(ItemReader<? extends I> reader) {
159160
this.reader = reader;
160161
return self();
161162
}
@@ -167,7 +168,7 @@ public ChunkOrientedStepBuilder<I, O> reader(ItemReader<I> reader) {
167168
* @param processor an item processor
168169
* @return this for fluent chaining
169170
*/
170-
public ChunkOrientedStepBuilder<I, O> processor(ItemProcessor<I, O> processor) {
171+
public ChunkOrientedStepBuilder<I, O> processor(ItemProcessor<? super I, ? extends O> processor) {
171172
this.processor = processor;
172173
return self();
173174
}
@@ -179,7 +180,7 @@ public ChunkOrientedStepBuilder<I, O> processor(ItemProcessor<I, O> processor) {
179180
* @param writer an item writer
180181
* @return this for fluent chaining
181182
*/
182-
public ChunkOrientedStepBuilder<I, O> writer(ItemWriter<O> writer) {
183+
public ChunkOrientedStepBuilder<I, O> writer(ItemWriter<? super O> writer) {
183184
this.writer = writer;
184185
return self();
185186
}
@@ -395,7 +396,6 @@ public ChunkOrientedStepBuilder<I, O> observationRegistry(ObservationRegistry ob
395396
return self();
396397
}
397398

398-
@SuppressWarnings("unchecked")
399399
public ChunkOrientedStep<I, O> build() {
400400
Assert.notNull(this.reader, "Item reader must not be null");
401401
Assert.notNull(this.writer, "Item writer must not be null");
@@ -457,6 +457,7 @@ public ChunkOrientedStep<I, O> build() {
457457
return chunkOrientedStep;
458458
}
459459

460+
@SuppressWarnings({ "rawtypes", "unchecked" })
460461
private void registerTypedListener(StepListener stepListener, ChunkOrientedStep<I, O> chunkOrientedStep) {
461462
if (stepListener instanceof ItemReadListener listener) {
462463
chunkOrientedStep.registerItemReadListener(listener);

spring-batch-core/src/main/java/org/springframework/batch/core/step/item/ChunkOrientedStep.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@
9191
* @author Andrey Litvitski
9292
* @author xeounxzxu
9393
* @author Minchul Son
94+
* @author Yanming Zhou
9495
* @since 6.0
9596
*/
9697
public class ChunkOrientedStep<I, O> extends AbstractStep {
@@ -100,16 +101,16 @@ public class ChunkOrientedStep<I, O> extends AbstractStep {
100101
/*
101102
* Step Input / Output parameters
102103
*/
103-
private final ItemReader<I> itemReader;
104+
private final ItemReader<? extends I> itemReader;
104105

105106
private final CompositeItemReadListener<I> compositeItemReadListener = new CompositeItemReadListener<>();
106107

107108
@SuppressWarnings("unchecked")
108-
private ItemProcessor<I, O> itemProcessor = item -> (O) item;
109+
private ItemProcessor<? super I, ? extends O> itemProcessor = item -> (O) item;
109110

110111
private final CompositeItemProcessListener<I, O> compositeItemProcessListener = new CompositeItemProcessListener<>();
111112

112-
private final ItemWriter<O> itemWriter;
113+
private final ItemWriter<? super O> itemWriter;
113114

114115
private final CompositeItemWriteListener<O> compositeItemWriteListener = new CompositeItemWriteListener<>();
115116

@@ -168,8 +169,8 @@ public class ChunkOrientedStep<I, O> extends AbstractStep {
168169
* @param itemWriter the item writer to write items
169170
* @param jobRepository the job repository to use for this step
170171
*/
171-
public ChunkOrientedStep(String name, int chunkSize, ItemReader<I> itemReader, ItemWriter<O> itemWriter,
172-
JobRepository jobRepository) {
172+
public ChunkOrientedStep(String name, int chunkSize, ItemReader<? extends I> itemReader,
173+
ItemWriter<? super O> itemWriter, JobRepository jobRepository) {
173174
super(jobRepository);
174175
this.chunkSize = chunkSize;
175176
this.itemReader = itemReader;
@@ -181,7 +182,7 @@ public ChunkOrientedStep(String name, int chunkSize, ItemReader<I> itemReader, I
181182
* Set the item processor to use for processing items.
182183
* @param itemProcessor the item processor to set
183184
*/
184-
public void setItemProcessor(ItemProcessor<I, O> itemProcessor) {
185+
public void setItemProcessor(ItemProcessor<? super I, ? extends O> itemProcessor) {
185186
Assert.notNull(itemProcessor, "Item processor must not be null");
186187
this.itemProcessor = itemProcessor;
187188
}

0 commit comments

Comments
 (0)