Well, if you define it as `ItemProcessor<? super I,? extends O>` (as it is also done in the ClassifierCompositeItemWriter), you cannot route to an item processor delegate with a narrower input type, as noted above.  And if you define it as `ItemProcessor<? extends I,? extends O>` it's also incorrect because you wouldn't be able to return an item processor with a wider input type. Ideally you would want to express something like `ItemProcessor<? extends I || ? super I,? extends O>` which isn't possible so that's why I used `ItemProcessor<?, ? extends O>`.