您需要确保从 MATLAB 传递到 Java 的数据可以正确转换。有关将哪些类型转换为其他类型的转换矩阵,请参阅 MATLAB 的外部接口文档。
MATLAB 将大多数数据视为按值传递(具有句柄语义的类除外),并且似乎没有办法将结构包装在 Java 接口中。但是您可以使用另一个 HashMap 来充当结构,并将 MATLAB 结构转换为 HashMap(对于多级结构、函数句柄和其他不能很好地与 MATLAB/Java 数据转换过程配合使用的野兽有一个明显的警告) .
function hmap = struct2hashmap(S)
if ((~isstruct(S)) || (numel(S) ~= 1))
error('struct2hashmap:invalid','%s',...
'struct2hashmap only accepts single structures');
end
hmap = java.util.HashMap;
for fn = fieldnames(S)'
% fn iterates through the field names of S
% fn is a 1x1 cell array
fn = fn{1};
hmap.put(fn,getfield(S,fn));
end
一个可能的用例:
>> M = java.util.HashMap;
>> M.put(1,'a');
>> M.put(2,33);
>> s = struct('a',37,'b',4,'c','bingo')
s =
a: 37
b: 4
c: 'bingo'
>> M.put(3,struct2hashmap(s));
>> M
M =
{3.0={a=37.0, c=bingo, b=4.0}, 1.0=a, 2.0=33.0}
>>
(读者练习:将其更改为递归地为本身是结构的结构成员工作)