JavaScript functions as Java interfaces
先の Runnable の例や、様々なイベントリスナーを実装する際、メソッド1つだけのインタフェースを実装する必要がある。 そのようなインタフェースが予想されるとき、Rhino は JavaScript function を pass する。 function はインタフェースメソッドの実装として call される。
ここに、簡易型のRunnableの例を示す:
js> t = java.lang.Thread(function () { print("\nrunning"); }); Thread[Thread-0,5,main] js> t.start() js> running
すべてのメソッドで同じ Signature があるなら Rhino は JavaScript function を Javaインタフェースの実装のように使うことができる。 function を呼ぶとき、Rhinoは追加された引数としてメソッドの名前を渡す。 function はこれにより、どのメソッドに呼ばれたか識別できる:
js> var frame = new Packages.javax.swing.JFrame(); js> frame.addWindowListener(function(event, methodName) { if (methodName == "windowClosing") { print("Calling System.exit()..."); java.lang.System.exit(0); } }); js> frame.setSize(100, 100); js> frame.visible = true; true js> Calling System.exit()...