如何将Java对象实例传递给Python脚本并调用其方法?
最简单的实现方式:用Jython无缝互操作
嘿,这个需求用Jython来实现简直是量身定做——它本身就是跑在JVM上的Python实现,天生支持和Java对象无缝互操作,不需要跨进程折腾,直接在同一个JVM里操作同一个实例,步骤超简单:
1. 先搞定环境
先下载Jython的独立jar包(比如jython-standalone-2.7.3.jar),或者如果用Maven的话直接加依赖:
<dependency> <groupId>org.python</groupId> <artifactId>jython-standalone</artifactId> <version>2.7.3</version> <!-- 可以换成最新稳定版 --> </dependency>
2. 写Python脚本(比如命名为call_increment.py)
脚本里直接拿到Java传过来的实例,调用方法就行:
# 从系统属性里获取Java传递的MyObject实例 obj = java.lang.System.getProperties().get("myObjectInstance") # 直接调用Java对象的increment方法 obj.increment() # 要是想验证效果,还可以调用getter看counter值 # print("调用后counter值:", obj.getCounter())
3. 修改Java的Main类,传递实例并执行脚本
在Java代码里初始化Jython解释器,把MyObject实例传递给Python,然后执行脚本:
import org.python.util.PythonInterpreter; import java.util.Properties; public class Main { public static void main(String[] args) { MyObject obj = new MyObject(); // 设置系统属性,把Java实例传递给Python Properties props = new Properties(); props.putAll(System.getProperties()); props.put("myObjectInstance", obj); PythonInterpreter.initialize(System.getProperties(), props, new String[0]); // 创建解释器并执行Python脚本 try (PythonInterpreter interpreter = new PythonInterpreter()) { interpreter.execfile("call_increment.py"); } // 这里可以验证counter是否被修改了 // System.out.println("Python调用后counter值:" + obj.getCounter()); // 输出1 } }
为啥说这是最简单的?
因为整个过程完全在JVM内部完成,没有跨进程通信的复杂配置,Python脚本直接操作的就是你在Main里创建的那个MyObject实例,调用方法就像在Java里调用一样自然,完全符合你的需求。
内容的提问来源于stack exchange,提问作者EazyH
相关产品推荐
相关产品推荐

