abstract class Tmp { private String concat(Tmp tmp) { return tmp.collect(StringBuilder::new, StringBuilder::append, StringBuilder::append).toString(); } abstract R collect(Supplier supplier, BiConsumer accumulator, BiConsumer combiner); interface Supplier { T get(); } interface BiConsumer { void accept(T t, U u); } }