import java.util.*; class Main1 { interface I<T> { List<T> f(); } static class Test { <Z> void m(I<Z> i, I<Z> ii) { } <Z> void m(I<Z> s) { } { m(() -> emptyList(), () -> new ArrayList<String>()); m(() -> new ArrayList<String>(), () -> emptyList()); m((I<String>) () -> emptyList(), () -> new ArrayList<String>()); m(() -> Test.<String>emptyList(), () -> new ArrayList<String>()); m(() -> emptyList()); } static <T> List<T> emptyList() { return null; } } }