Создание экземпляров класса Java Scripting Engine - PullRequest
2 голосов
/ 19 октября 2011

Я пытаюсь реализовать конечную точку сценариев в нашем приложении, но у меня проблема: Можно ли создать экземпляр объекта, который является экземпляром абстрактного класса с помощью реализованных методов? В 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

1 Ответ

2 голосов
/ 19 октября 2011

Вы можете расширить свой абстрактный класс в Java, что-то вроде MouseAdapter делает с его интерфейсами, тогда в 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.
    }
});

Edit: Вы можете сделать это без «адаптера», просто сделайте:

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