ありそうでなさそうでありえない

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より重いかも。