Are we sure on these generics?  I'd expect this to be:
`Classifier<? extends I, ItemProcessor<? extends I, ? extends O>> …`

The classifier will take in the input item (which must be I or a subclass per the `ItemProcessor <I,O>` contract) and return an ItemProcessor that will take I or a subclass and return O or a subclass.