Java脚本引擎类实例化

Java Scripting Engine class instantiation

本文关键字:实例化 引擎 脚本 Java      更新时间:2023-09-26

我试图在我们的应用程序中实现脚本端点,但我有一个问题:是否有可能实例化一个对象,是实现方法的抽象类的实例?在Java中,它看起来像:

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

SimpleObject是一个抽象类,具有抽象方法doCustomAction如何通过Java脚本引擎做这样的事情?我正试着用下面的方法去做:

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

你可以在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.
    }
});

编辑:你可以不使用"adapter",只要输入:

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