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方法