interface VarArgsFunc { void take(String... in); } interface ArrayFunc { void take(String[] in); } class VarArgsTest { static void myMethod(String... in) {} static void myMethodArray(String[] in) {} VarArgsFunc v1 = VarArgsTest::myMethod; VarArgsFunc v2 = VarArgsTest::myMethodArray; ArrayFunc v3 = VarArgsTest::myMethod; ArrayFunc v4 = VarArgsTest::myMethodArray; } interface RegularFunc { void take(Object o); } interface RegularFunc2 { void take(Object o, String s); } interface RegularFunc3 { void take(Object o, String s, String s2); } class MoreVarAgrgsTest { static void myObjectArgArg(Object o, String... vararg) {} RegularFunc v1 = MoreVarAgrgsTest::myObjectArgArg; RegularFunc2 v2 = MoreVarAgrgsTest::myObjectArgArg; RegularFunc3 v4 = MoreVarAgrgsTest::myObjectArgArg; }