如何从nashorn访问Java对象函数
我想制作一个界面,允许用户提供任意过滤函数来处理Java应用程序中的记录。我决定为此使用Java脚本实用程序,特别是nashorn和JavaScript 我的问题是,当我传入要求值的对象时,我得到了如何从nashorn访问Java对象函数,java,nashorn,private-class,Java,Nashorn,Private Class,我想制作一个界面,允许用户提供任意过滤函数来处理Java应用程序中的记录。我决定为此使用Java脚本实用程序,特别是nashorn和JavaScript 我的问题是,当我传入要求值的对象时,我得到了TypeError:org.XXX.XXX.MyClass没有这样的函数XXX… 公共类过滤器类{ 脚本引擎; 发票发票; 公共过滤器类(文件){ ScriptEngineManager管理器=新建ScriptEngineManager(); engine=manager.getEngineByNam
TypeError:org.XXX.XXX.MyClass没有这样的函数XXX…
公共类过滤器类{
脚本引擎;
发票发票;
公共过滤器类(文件){
ScriptEngineManager管理器=新建ScriptEngineManager();
engine=manager.getEngineByName(“JavaScript”);
eval(新文件读取器(文件));
inv=(可开票)发动机;
}
公共布尔过程(MyObject对象){
对象结果=inv.invokeFunction(“通过”,对象);
返回(布尔)结果;
}
}
用于生成MyObject的对象工厂定义
公共类MyObject工厂{
私有类MyObject{
私有最终整数myint;
公共对象(int i){
myint=i;
}
public int getValue(){
返回myint;
}
}
公共MyObject生成对象(int i){
返回新的MyObject(i);
}
}
javascript文件
函数传递(o){
如果(o.getValue()>10){
返回true;
}否则{
返回false;
}
}
事实证明,nashorn无法访问在private
类中定义的函数,如示例中的MyObject类
不想公开我的嵌套类,因此我最终编写了一个包装类来公开MyObject字段:
公共类MyObjectWrapper{
私有最终MyObject MyObject;
公共MyObject包装器(MyObject o){
myobject=o;
}
public int getValue(){
返回myobject.getValue();
}
}
然后我可以通过包装来访问函数:
公共布尔过程(MyObject对象){
对象结果=inv.invokeFunction(“passs”,新的MyObjectWrapper(对象));
返回(布尔)结果;
}