我尝试做类似于Question 4617364的事情,但是对于Python-从Python脚本文件加载一个类,在这个文件中,这个类实现了一个Java接口,并将它交给一些可以使用它的方法的Java代码-但是对object方法的调用返回无效值,并且从初始化器打印似乎没有任何作用。在
我的实现如下所示:
接口:
package some.package;
import java.util.List;
public interface ScriptDemoIf {
int fibonacci(int d);
List<String> filterLength(List<String> source, int maxlen);
}
Python实现:
^{pr2}$类加载器:
public ScriptDemoIf load(String filename) throws ScriptException {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("jython");
FileReader script = new FileReader(filename);
try {
engine.eval(new FileReader(script));
} catch (FileNotFoundException e) {
throw new ScriptException("Failed to load " + filename);
}
return (ScriptDemoIf) engine.eval("ScriptDemo()");
}
public void run() {
ScriptDemoIf test = load("ScriptDemo.py");
System.out.println(test.fibonacci(30));
}
(显然,在现实生活中加载器有点通用-它不假定实现类名为“ScriptDemo”-这只是为了简单起见)。在
当代码正在运行时,我看不到Python的__init__
的打印(虽然如果我在脚本的主体中放了一个print,那么我确实看到了),但是run()
中的test
变量看起来像一个有效的jython“proxy object”,而且没有出现转换错误。当我尝试运行fibonacci()
方法时,我总是得到0(即使我将方法更改为始终返回一个固定的数字),而filterLength()
方法总是返回null(可能与Java接口中的默认值有关)。在
我做错什么了?在
你在用什么版本的jython?您可能遇到了jsr223jython错误:http://bugs.jython.org/issue1681
根据错误描述:
相关问题 更多 >
编程相关推荐