class Main2 { void bar(Fun collector) { } Fun foo(D d) { return null; } public void test() { bar(new Foo<>()); } interface Fun { R f(T t); } class Foo implements Fun { @Override public Integer f(K k) { return null; } } }