class NonStaticInner { class Inner { Inner(NonStaticInner outer) {} Inner() {} } interface I1 { Inner m(NonStaticInner rec); } interface I2 { Inner m(); } static void call11(I1 s) {} static void call12(I2 s) {} static { I1 i1 = NonStaticInner.Inner :: new; call11(NonStaticInner.Inner :: new); I2 i2 = NonStaticInner.Inner :: new; call12(NonStaticInner.Inner :: new); } } class StaticInner { static class Inner { Inner(StaticInner outer) {} Inner() {} } interface I1 { Inner m(StaticInner rec); } interface I2 { Inner m(); } static void call21(I1 s) {} static void call22(I2 s) {} static { I1 i1 = StaticInner.Inner :: new; call21(StaticInner.Inner :: new); I2 i2 = StaticInner.Inner :: new; call22(StaticInner.Inner :: new); } } class StaticInner1 { static class Inner { Inner(StaticInner1 outer) {} Inner() {} } interface I1 { Inner _(StaticInner1 rec); } interface I2 { Inner _(); } static void call3(I1 s) {} static void call3(I2 s) {} static { call3(StaticInner1.Inner :: new); } } class StaticInner2 { static class Inner { Inner() {} } interface I1 { Inner m(StaticInner2 rec); } static { I1 i1 = StaticInner2.Inner :: new; } { I1 i1 = StaticInner2.Inner :: new; } } class NonStaticInner2 { class Inner { Inner() {} } interface I1 { Inner m(NonStaticInner2 rec); } static { I1 i1 = NonStaticInner2.Inner :: new; } { I1 i1 = NonStaticInner2.Inner :: new; } } class NonStaticInner3 { class Foo { Foo(Integer i) {} Foo() {} } interface I1 { X m(int i); } interface I2 { X m(); } interface I3 { X m(NonStaticInner3 rec, int i); } interface I4 { X m(NonStaticInner3 rec); } { I1 b1 = Foo::new; I2 b2 = Foo::new; } { I3 b1 = Foo::new; I4 b2 = Foo::new; } }