null とオーバーロード

kuzha スクリプト内から null を引数に java のメソッドを呼び出すと、そのメソッドがオーバーロードされていたときにどのメソッドが呼び出されるかわからなくなっちゃうので、それを解決しようとあれこれ思案中だったりします。
現在考え中なのが、

  • null に型情報を持たせる
    • スクリプト内からは、JavaClass オブジェクトの NULL スロットから引っ張り出せる
    • スクリプト外からは、kuzha.runtime.Converter#cast メソッドで型付き null が参照できる

みたいな方法で、これを使うと kuzha スクリプト内からは

String = jclass: "java.lang.String";
System = jclass: "java.lang.System";
System.out println: String.NULL;

のように呼び出せて、Java から kuzha を操作するときには

((Invocable)engine).invokeMethod(obj, "method", Converter.cast(String.class, null));

のように呼び出せるようになります。
他にも、明示的に型を指定してのメソッド呼び出しとかもあったほうがいいのかなと思いつつ、たぶん型付き null が妥当だろうなと思っている感じです。


明示的に型を指定する場合には、こんな感じになるのかな。

String = jclass: "java.lang.String";
System = jclass: "java.lang.System";
println = System.out.println dispatch: String;
println: null;

これも良いかも。いろいろ策が考え付いて面白い部分です。