import java.util.ArrayList; import java.util.List; import java.util.function.BiFunction; import java.util.function.Function; class InferenceExample<E> { public <Output> List<Output> convertAll(Function<E, Output> converter) { return invoke (MyArrayList::convertAll, converter); } protected <A, R> R invoke(BiFunction<MyArrayList<E>, A, R> action, A arg) { return null; } public class MyArrayList<T> extends ArrayList<T> { public <Output1> List<Output1> convertAll(Function<T, Output1> converter) { return null; } } }