实现类的Jython脚本未从J正确初始化

2024-09-29 21:29:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试做类似于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接口中的默认值有关)。在

我做错什么了?在


Tags: 方法testnewstringloadjavapublicfilename

热门问题