使用javap,我相信Javascript类型
test并不意味着生成的Java类型就是此类。生成的Java类型将在其构造函数中调用脚本代码。这不会导致
addNumbers作为Java方法公开。
>javap -classpath . testpublic class test extends org.mozilla.javascript.NativeFunction implements org.mozilla.javascript.script{ public test(org.mozilla.javascript.scriptable, org.mozilla.javascript.Context, int); public test(); public static void main(java.lang.String[]); public final java.lang.Object exec(org.mozilla.javascript.Context, org.mozilla.javascript.scriptable); public final java.lang.Object call(org.mozilla.javascript.Context, org.mozilla.javascript.scriptable, org.mozilla.javascript.scriptable, java.lang.Object[]); public int getLanguageVersion(); public java.lang.String getFunctionName(); public int getParamCount(); public int getParamAndVarCount(); public java.lang.String getParamOrVarName(int); public java.lang.String getEnpredSource(); public boolean getParamOrVarConst(int);}在两行之间阅读时,我会说您需要映射到Java类型才能执行您想要的操作。从jsc
doc:
-implements java-intf-name指定
java-intf-name应从传入的Javascript源文件中生成实现Java接口的Java类
。使源文件中的每个全局函数成为所生成类的方法,并以相同的名称实现接口中的任何方法。
定义此接口:
//Adder.javapublic interface Adder { public int addNumbers(int a, int b);}编写此实现:
//AdderImpl.jsfunction addNumbers(a, b) { return a+b;}用参数编译Javascript
-implements Adder AdderImpl.js。像这样调用方法:
Adder adder = new AdderImpl();int n = adder.addNumbers(1, 2);System.out.println(n);
我会猜测,由于语言的类型系统不同,可能有必要这样做。
我使用了Rhino 1.7R2。 为了简洁起见,我避免使用包等。



