class ClassifierCompositeItemProcessorBuilder<I, O> {

	private Classifier<? super I, ItemProcessor<?, ? extends O>> classifier;

	/**
	 * Establishes the classifier that will determine which {@link ItemProcessor} to use.
	 * @param classifier the classifier to set
	 * @return this instance for method chaining
	 * @see ClassifierCompositeItemProcessor#setClassifier(Classifier)
	 */
	public ClassifierCompositeItemProcessorBuilder<I, O> classifier(
			Classifier<? super I, ItemProcessor<?, ? extends O>> classifier) {
		this.classifier = classifier;

		return this;
	}

	/**
	 * Returns a fully constructed {@link ClassifierCompositeItemProcessor}.
	 * @return a new {@link ClassifierCompositeItemProcessor}
	 */
	public ClassifierCompositeItemProcessor<I, O> build() {<FILL_FUNCTION_BODY>}

}

		Assert.notNull(classifier, "A classifier is required.");

		ClassifierCompositeItemProcessor<I, O> processor = new ClassifierCompositeItemProcessor<>();
		processor.setClassifier(this.classifier);
		return processor;
	
<no_super_class>