我正在尝试在我们的应用程序中实现脚本端点,但我遇到了一个问题: 是否可以使用已实现的方法实例化作为抽象类实例的对象?在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
答案 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.
}
});