Rhino詳細:JavaScriptからJavaインターフェースの実装とクラスの継承

白石俊平(あゆた)
2008-02-12 08:30:00
  • このエントリーをはてなブックマークに追加

方法その1:「new インターフェース(実装オブジェクト)」

 実装方法の一つ目は、インターフェースのコンストラクタに実装オブジェクトを渡すというものです。文章で説明してもわかりにくいと思うので、次のコード例を見てください。

 まず、実装したいインターフェースのメソッドと同じ名前のプロパティを持ち、関数オブジェクトをその値とするオブジェクトを作成します。

var impl = {
    run: function() {
         java.lang.System.out.println("Hello");
    }
};

 次に、そのオブジェクトをコンストラクタの引数として、インターフェースに対してnewを行います。Java言語ではこのような書式は許されていませんが、Rhino環境では特別にインターフェースや抽象クラスをnewすることができます。

var runnable = new java.lang.Runnable(impl);

 これで、インターフェースの実装が完了です。後はこの変数を用いてスレッドの生成を行ってみましょう。

var thread = new java.lang.Thread(runnable);
thread.start();

 方法さえ覚えてしまえば、どうと言うことはありません。以下のように短く書くこともできます。こうして書くと、Javaで匿名クラスを利用したコードに似ていますね。

var thread = new java.lang.Thread(new java.lang.Runnable({
    run: function() {
         java.lang.System.out.println("Hello");
    }
}));
thread.start();

 しかし、せっかくスクリプト言語を使っているのに、期待したほどコンパクトなコードになりませんね。Rhinoでは、インターフェースの実装をさらにコンパクトにできるよう、さらに他の方法も用意してあります。

  • コメント(2件)
#1 さくらば   2008-02-19 23:37:43
最後のサンプルは Java SE 6 の Rhino では動作しません。Java SE 6 の JavaAdapter は Sun の実装に変更されており、単一インタフェースのみインプリメントすることができます。
#2 大野晋一   2008-02-21 15:08:21
さくらばさん、ご指摘ありがとうございます。おっしゃるとおり、Java SE 6とともに配布されるものでは無理で、最新のRhinoを使う必要がありますね。
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]