Вы должны убедиться, что данные, передаваемые из MATLAB в Java, могут быть правильно преобразованы. См. В документе MATLAB Внешние интерфейсы матрицу преобразования того, какие типы преобразуются в какие другие типы.
MATLAB обрабатывает большинство данных как передаваемые по значению (за исключением классов с семантикой дескриптора), и, похоже, нет способа обернуть структуру в интерфейсе Java. Но вы могли бы использовать другой HashMap, чтобы действовать как структура, и конвертировать структуры MATLAB в HashMaps (с явным предупреждением для многоуровневых структур, дескрипторов функций и других зверей, которые плохо работают с процессом преобразования данных 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}
>>
(упражнение для читателя: измените это на рекурсивную работу для элементов конструкции, которые сами являются структурами)