ifclass F0 static A callF_gen(F0 f) { ret f?!; } endif ifclass F1 static B callF_gen(F1 f, A a) { ret f?.get(a); } endif ifclass IF0 static A callF_gen(IF0 f) { ret f?!; } endif ifclass IF1 static B callF_gen(IF1 f, A a) { ret f?.get(a); } endif static B callF_gen(A a, IF1 f) { ret f?.get(a); } ifclass F2 static C callF_gen(F2 f, A a, B b) { ret f?.get(a, b); } endif ifclass IF2 static C callF_gen(IF2 f, A a, B b) { ret f?.get(a, b); } endif ifclass VF1 static void callF_gen(VF1 f, A a) { f?.get(a); } endif static void callF_gen(A a, IVF1 f) { f?.get(a); } static void callF_gen(IVF1 f, A a) { f?.get(a); } sO callF_gen(Runnable r) { r?.run(); null; } sO callF_gen(O f, O... args) { ret callF(f, args); }