class DefaultConstructor { interface I1 { R invoke(); } interface I2 { R invoke(A a); } static class Outer { class Inner { } static void test1() { I2 i2 = Inner :: new; I2 i2str = Inner :: new; } void test2() { I1 i1 = Inner :: new; I1 i1Int = Inner :: new; I2 i2 = Inner :: new; } } static void test1() { I2 i2 = Outer.Inner::new; I2 i2str = Outer.Inner::new; } void test2() { I2 i2 = Outer.Inner::new; I2 i2str = Outer.Inner::new; } } class DefaultConstructor1 { public void bar() { } { Runnable b1 = DefaultConstructor1 :: new; } } class DefaultConstructor2 { interface I { void foo(DefaultConstructor2 e); } void f() { I i1 = DefaultConstructor2 :: new; I i2 = this::new; } } class DefaultConstructor3 { public class Inner {} public static class StaticInner {} static I i = Inner::new; static I1 i1 = StaticInner::new; interface I { Inner foo(); } interface I1 { StaticInner foo(); } } class DefaultConstructor4 { public class Inner {} public static class StaticInner {} static I i = Inner::new; static I1 i1 = StaticInner::new; interface I { Inner foo(DefaultConstructor4 receiver); } interface I1 { StaticInner foo(DefaultConstructor4 receiver); } }