You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:32:50