Both the `? super I` for the input of the Classifier and the `?` instead of `? super I` for the input of the ItemProcessor make the solution a bit more flexible:
* You can inject a `Classifier<Fruit, ItemProcessor<Fruit, String>>` into a `ClassifierCompositeItemProcessor<Apple, String>` (wider input type for the classifier)
* The classifier can route to an ItemProcessor based on the specific subclass of the item: e.g. route between an `ItemProcessor<Apple, String>` and an `ItemProcessor<Orange, String>` in a `ClassifierCompositeItemProcessor<Fruit, String>` (narrower input type of the item processor delegates)