import java.util.function.Function; abstract class Test { abstract Collector create(Foo foo, Function fun); abstract Foo toArray(Ts identity); Collector foo(Tf t) { return create(toArray(t), a -> a[0]); } interface Collector {} class Foo {} }