Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从nashorn访问Java对象函数_Java_Nashorn_Private Class - Fatal编程技术网

如何从nashorn访问Java对象函数

如何从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

我想制作一个界面,允许用户提供任意过滤函数来处理Java应用程序中的记录。我决定为此使用Java脚本实用程序,特别是nashorn和JavaScript

我的问题是,当我传入要求值的对象时,我得到了
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(对象));
返回(布尔)结果;
}