import java.util.ArrayList; import java.util.Collection; import java.util.function.Consumer; import java.util.function.Function; class Test { void iterateColumn (CollectionSerializer valueSerializer, Consumer consumer) {} private void put(Collection tags){} void f() { iterateColumn(new CollectionSerializer<>(ArrayList::new), this::put); // iterateColumn(CollectionSerializer.create(ArrayList::new), this::put); } } class CollectionSerializer{ public CollectionSerializer(final Function factory) {} static CollectionSerializer create(Function f) { return new CollectionSerializer<>(f);} }