java - Java Scripting Engineクラスのインスタンス化

java javascript scripting

アプリケーションにスクリプトエンドポイントを実装しようとしていますが、問題があります。
実装されたメソッドで抽象クラスのインスタンスであるオブジェクトをインスタンス化することは可能ですか? Javaでは次のようになります。

SimpleObject obj = new SimpleObject("contructor arg0") {    
   public void doCustomAction() {
     System.out.println("Action");
   }
}


SimpleObjectは、抽象メソッドdoCustomActionを持つ抽象クラスです
Java Scripting Engineを介してそのようなことをするには?私は次の方法でやろうとしています:

obj1 = new SimpleObject("value1") {
    doCustomAction : function() {
       //Do smth.
    }
}


しかし、エンジンはそのような例外をスローします:

javax.script.ScriptException: sun.org.mozilla.javascript.internal.EvaluatorException:
   error instantiating (JavaAdapter: first arg should be interface Class (<Unknown source>#1)): 
  class SimpleObject is interface or abstract (<Unknown source>#1) in <Unknown source> at line number 1
答え
MouseAdapterがそのインターフェースで行うように、Javaで抽象クラスを拡張し、javascriptで次のようにこの「アダプター」を使用できます。

Javaの場合:

public abstract class SimpleObject {
   abstract void doCustomAction();
}
public class SimpleObjectAdapter extends SimpleObject {
   void doCustomAction(){}
}


JavaScriptの場合:

obj1 = new JavaAdapter(SimpleObjectAdapter,{
    doCustomAction : function() {
       //Do smth.
    }
});


編集:
「アダプター」なしでそれを行うことができます。

obj1 = new JavaAdapter(Packages.SimpleObject, {
   doCustomAction: function(){
      //Do smth.
   }
});
関連記事

java - AndroidのようなContextMenu

java - パス文字列がJavaのローカルマシンかリモートマシンかを判別する方法

java - xAuth for Java?

java - オブジェクトとプロパティが同じタイプである@XmlInverseReferenceを使用することは可能ですか?

java - JAASフォーム認証が常にJbossで失敗する

java - Antにセミコロンをパラメーターとして渡します

java - クラスがフィルタリングされるSpring Bean…または2つのBeanの間で選択する方法?

java - テキストエディターをswtリストウィジェットに追加する

java - GTFSと複数のルート

java - Enterprise Architectとコードの同期