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 */
7677public 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 );
0 commit comments