void () { 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); }