import java.lang.invoke.*; class Main { void foo() throws Exception { MethodHandles.Lookup l = MethodHandles.lookup(); l.findVirtual(Test.class, "method1", MethodType.genericMethodType(2)); l.findVirtual(Test.class, "method1", MethodType.genericMethodType(2, false)); l.findVirtual(Test.class, "method1", MethodType.genericMethodType(2, true)); l.findVirtual(Test.class, "method1", MethodType.genericMethodType(1)); l.findVirtual(Test.class, "method1", MethodType.genericMethodType(3)); l.findVirtual(Test.class, "method2", MethodType.genericMethodType(2, true)); l.findVirtual(Test.class, "method2", MethodType.genericMethodType(2, false)); l.findVirtual(Test.class, "method2", MethodType.genericMethodType(1)); l.findVirtual(Test.class, "method2", MethodType.genericMethodType(1, true)); l.findVirtual(Test.class, "method2", MethodType.genericMethodType(2)); l.findVirtual(Test.class, "method2", MethodType.genericMethodType(3)); } } class Test { public T method1(T a, T b) {return null;} public T method2(T a, T b, T... c) {return null;} }