Java调用Python
项目中有特殊要求,为了灵活,某个接口需要在Python脚本中实现,然后在Java代码中调用Python脚本来实例化对象。
网上一般的文章都是用PythonInterpreter来调用,不过大神说创建PythonInterpreter会消耗很多资源,影响效率,可以使用PySystemState,
先用PySystemState得到一个importer再导入Python的module,得到module里的类的实例,至于原理,我不是很懂。
首先是Python脚本,这里简单意思一下就好,毕竟可能涉及公司规定,不宜将全部代码都贴出来。
#省略import
class ClassName(InterfaceName):
def __init__(self):
#省略若干代码
def function(self):
#省略若干代码
#省略若干代码其中,ClassName是该类的类名,InterfaceName是实现的Java接口的名字,接下来是Java代码public static void main(String[] args) {
PySystemState state = new PySystemState();
PyObject clazz;
Py.getSystemState().path.append(Py.newString("E:\dir"));
PyObject importer = state.getBuiltins().__getitem__(Py.newString("__import__"));
PyObject module = importer.__call__(Py.newString("Script"));
clazz = module.__findattr__("ClassName");
InterfaceName obj = (InterfaceName) clazz.__call__().__tojava__(InterfaceName.class);
}这里将脚本文件放在了E盘的dir文件夹下,Script是脚本文件的名字(注意不能为test,否则报空指针),这样就得到了实现InterfaceName接口的类的对象,与直接使用Java实现该接口没有什么区别,作用就是在程序运行的时候也可以在不修改Java代码的情况下添加新的类,比较灵活。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: java和python互相调用
- 下一篇: Java之——调用python方法
