ありそうでなさそうでありえない
public class Hoge { public int foo() { return 1; } public int foo(int a, int b) { return a + b; } }
に対して、// generated. 以降を自動実装。
public class Hoge { public int foo() { return 1; } public int foo(int a, int b) { return a + b; } // generated. public static class Mfoo { public Object invoke(Hoge obj, Object... args) { return null; } public int invoke(Hoge obj) { return obj.foo(); } public int invoke(Hoge obj, int a, int b) { return obj.foo(a, b); } } public static final Mfoo foo = new Mfoo(); }
すると、
public static void main(String[] args) { Hoge.foo.invoke(new Hoge()); Hoge.foo.invoke(new Hoge(), 10, 20); }
なんてのが可能。
ついでに、
interface MethodTable<T> { Object invoke(T obj, Object...args); }
あたりでも実装させておけばよさげ。問題は、メソッド検索が下手するとReflectionより重いかも。