class Test { static class SuperFoo {} static class Foo extends SuperFoo {} interface I { SuperFoo m(); } SuperFoo foo(I ax) { return null; } SuperFoo ls = foo(() -> new Foo<>()); SuperFoo li = foo(() -> new Foo<>()); SuperFoo lw = foo(() -> new Foo<>()); }