RE: メソッドオーバーロードの動的束縛
cf: メソッドオーバーロードの動的束縛とか - しげるメモ
さくっと解決してみた。
import javax.script.*; public class ScriptingDispatch { public static void main(String[] args) throws Exception { ScriptingDispatch obj = new ScriptingDispatch(); Root hoge = new Hoge(); ScriptEngine engine = new ScriptEngineManager().getEngineByName("kuzha"); ((Invocable)engine).invokeMethod(obj, "method", hoge); } public void method(Object o) { System.out.println("Object"); } public void method(Hoge o) { System.out.println("Hoge"); } public void method(Foo o) { System.out.println("Foo"); } interface Root {} static class Hoge implements Root {} static class Foo implements Root {} static class Bar extends Hoge {} }
>java -cp ./bin;kuzha.jar;asm-3.1.jar ScriptingDispatch Hoge
ふははははすみません orz...
けど同じように JRuby とか Jython とか経由で呼び出すとさくっと書けると思いました。思ったので実行してみた感じ。実際さくっと書けたね。
パフォーマンスは最悪だろうけど、というと Pnuts あたり使えば爆速になりそうでちょっと怖かったりします。