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

MATLAB与Java数据交互:向Java Stack存入MATLAB对象后取出为空数组的问题排查

MATLAB与Java数据交互:向Java Stack存入MATLAB对象后取出为空数组的问题排查

嗨,我来帮你捋清楚这个问题的原因和解决办法~

首先,咱们先搞明白为什么会出现取出空数组的情况:你用MATLAB的cell {a} 把自定义类对象包装后传给Java的push方法时,MATLAB和Java之间的类型转换机制在这里出了点小问题。MATLAB的cell数组和Java的Object[]数组虽然看起来类似,但底层处理逻辑不一样——当你把包含MATLAB自定义对象的cell传递给Java方法时,MATLAB无法直接把自定义对象映射为Java能识别的类型,所以转换后的Java数组就变成了嵌套的空数组(也就是你看到的[[]]),相当于你的MATLAB对象没有被正确存进去。

那该怎么解决呢?其实很简单,咱们换一种包装方式,不用MATLAB的cell,而是手动创建一个Java的Object数组来存放你的MATLAB对象,具体代码如下:

stack = java.util.Stack;
a = Value; % 实例化你的MATLAB自定义类
% 创建一个长度为1的Java Object数组
java_obj_arr = javaArray('java.lang.Object', 1);
java_obj_arr(1) = a; % 把MATLAB对象存入Java数组
stack.push(java_obj_arr);

然后取出对象的时候,只需要从Java数组里把元素取出来就行:

a1 = stack.pop;
% 从Java数组中还原出MATLAB对象
a1 = a1(1);

这样操作后,a1就会是你原来存入的Value类实例啦。

另外,你提到打算用MATLAB数组模拟栈,这其实也是个很稳妥的方案,毕竟MATLAB自己的数据结构在MATLAB环境里操作起来更顺手。不过如果就是想搞懂Java交互的问题,上面的方法就能解决你的疑惑~

备注:内容来源于stack exchange,提问作者user2609605

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 11:00:28