class Test { interface IFactory { Object m(); } @interface Anno {} enum E {} interface I {} static class Foo { } static abstract class ABar { protected ABar() { } } static abstract class ABaz { } void foo(IFactory cf) { } void testAssign() { IFactory c1 = Anno::new; IFactory c2 = E::new; IFactory c3 = I::new; IFactory c4 = Foo::new; IFactory c5 = 1::new; IFactory c6 = ABar::new; IFactory c7 = ABaz::new; foo(Anno::new); foo(E::new); foo(I::new); foo(Foo::new); foo(1::new); foo(ABar::new); foo(ABaz::new); } }