Java Scripting Engine类实例化

时间:2011-10-19 12:08:44

标签: 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

1 个答案:

答案 0 :(得分:2)

您可以使用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.
    }
});

编辑: 你可以在没有“适配器”的情况下完成它,只需这样做:

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