Java调用Python

来源:互联网 发布:航天税金软件 编辑:程序博客网 时间:2024/05/24 03:09

项目中有特殊要求,为了灵活,某个接口需要在Python脚本中实现,然后在Java代码中调用Python脚本来实例化对象。

网上一般的文章都是用PythonInterpreter来调用,不过大神说创建PythonInterpreter会消耗很多资源,影响效率,可以使用PySystemState,

先用PySystemState得到一个importer再导入Python的module,得到module里的类的实例,至于原理,我不是很懂。

首先是Python脚本,这里简单意思一下就好,毕竟可能涉及公司规定,不宜将全部代码都贴出来。

#省略importclass 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代码的情况下添加新的类,比较灵活。
0 0
原创粉丝点击