package test; import javaApi.*; import java.lang.Integer; import java.util.Collections; import java.util.List; class Test { public static Java8Class field = new Java8Class(); public static Java8Class staticFun() { return new Java8Class(); } public int memberFun() { return 1; } public static String testOverloads() { return "1"; } public static String testOverloads(int i) { return "2"; } public Test(int i) { super(); } public Test() { } } class Test2 {} class Java8Class { private Java8Class field = new Java8Class(); private MethodReferenceHelperClass h = new MethodReferenceHelperClass(); public void testStaticFunction() { JFunction0 staticFunFromSameClass = Java8Class::staticFun; staticFunFromSameClass.foo(); MethodReferenceHelperClass.staticFun0(Java8Class::staticFun); h.memberFun0(Java8Class::staticFun); JFunction0 staticFunFromAnotherClass = Test::staticFun; staticFunFromAnotherClass.foo(); MethodReferenceHelperClass.staticFun0(Test::staticFun); h.memberFun0(Test::staticFun); } public void testMemberFunctionThroughClass() { JFunction2<Java8Class, Integer> memberFunFromClass = Java8Class::memberFun; memberFunFromClass.foo(new Java8Class()); MethodReferenceHelperClass.staticFun2(Java8Class::memberFun); h.memberFun2(Java8Class::memberFun); } public void testMemberFunctionThroughObject() { Java8Class obj = new Java8Class(); JFunction0 memberFunFromSameClass = obj::memberFun; memberFunFromSameClass.foo(); MethodReferenceHelperClass.staticFun0(obj::memberFun); h.memberFun0(obj::memberFun); Test anotherObj = new Test(); JFunction0 memFunFromAnotherClass = anotherObj::memberFun; memFunFromAnotherClass.foo(); MethodReferenceHelperClass.staticFun0(anotherObj::memberFun); h.memberFun0(anotherObj::memberFun); JFunction0 memberFunThroughObj1 = field::memberFun; memberFunThroughObj1.foo(); MethodReferenceHelperClass.staticFun0(field::memberFun); h.memberFun0(field::memberFun); JFunction0 memberFunThroughObj2 = Test.field::memberFun; memberFunThroughObj2.foo(); MethodReferenceHelperClass.staticFun0(Test.field::memberFun); h.memberFun0(Test.field::memberFun); JFunction0 memberFunThroughObj3 = Test.staticFun()::memberFun; memberFunThroughObj3.foo(); MethodReferenceHelperClass.staticFun0(Test.staticFun()::memberFun); h.memberFun0(Test.staticFun()::memberFun); } public void testConstructor() { JFunction0 constructorSameClass = Java8Class::new; constructorSameClass.foo(); MethodReferenceHelperClass.staticFun0(Java8Class::new); h.memberFun0(Java8Class::new); JFunction0 qualifiedConstructorSameClass = test.Java8Class::new; qualifiedConstructorSameClass.foo(); MethodReferenceHelperClass.staticFun0(test.Java8Class::new); h.memberFun0(test.Java8Class::new); JFunction0 constructorAnotherClass = Test::new; constructorAnotherClass.foo(); MethodReferenceHelperClass.staticFun0(Test::new); h.memberFun0(Test::new); JFunction2<Integer, Test> constructorAnotherClassWithParam = Test::new; constructorAnotherClassWithParam.foo(1); MethodReferenceHelperClass.<Integer, Test>staticFun2(Test::new); h.<Integer, Test>memberFun2(Test::new); JFunction0 qualifiedConstructorAnotherClass = test.Test::new; qualifiedConstructorAnotherClass.foo(); MethodReferenceHelperClass.staticFun0(test.Test::new); h.memberFun0(test.Test::new); JFunction0 constructorAnotherClassWithoutConstructor = Test2::new; constructorAnotherClassWithoutConstructor.foo(); MethodReferenceHelperClass.staticFun0(Test2::new); h.memberFun0(Test2::new); } public void testLibraryFunctions() { JFunction2<String, Integer> memberFunFromClass = String::length; memberFunFromClass.foo("str"); new Thread(System.out::println).start(); ((Runnable) System.out::println).run(); } public void testOverloads() { JFunction1<String> constructorWithoutParams = Test::testOverloads; constructorWithoutParams.foo(); MethodReferenceHelperClass.<String>staticFun1(Test::testOverloads); h.<String>memberFun1(Test::testOverloads); JFunction2<Integer, String> constructorWithParam = Test::testOverloads; constructorWithParam.foo(2); MethodReferenceHelperClass.<Integer, String>staticFun2(Test::testOverloads); h.<Integer, String>memberFun2(Test::testOverloads); } public void testGenericFunctions() { JFunction1<List<String>> emptyList = Collections::emptyList; emptyList.foo(); MethodReferenceHelperClass.<List<String>>staticFun1(Collections::emptyList); h.<List<String>>memberFun1(Collections::emptyList); } public static int staticFun() { return 1; } public int memberFun() { return 1; } public Java8Class() {} }