Debe asegurarse de que los datos pasados de MATLAB a Java se puedan convertir correctamente. Vea MATLAB External Interfaces document para la matriz de conversión de qué tipos se convierten a qué otros tipos.
MATLAB trata la mayoría de los datos como pasa-por-valor (con la excepción de las clases con semántica de manejador), y no parece haber una manera de ajustar una estructura en una interfaz Java. Pero podría usar otro HashMap para actuar como una estructura y convertir estructuras MATLAB en HashMaps (con una advertencia obvia para estructuras de múltiples niveles, manejadores de funciones, + otras bestias que no funcionan bien con el proceso de conversión de datos 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
un posible caso de uso:
>> 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}
>>
(un ejercicio para el lector: cambiar esto a trabajar de forma recursiva para miembros de la estructura que en sí son estructuras)
Pero, por lo que puedo decir, no son apropiados como argumentos para un parámetro Java 'Map <>'? – glglgl
Correcto, no lo son. Esta es solo una solución si desea ir con todos los tipos de datos Matlab en lugar de Java 'Map', y evitar las complejidades de la conversión de Java a Matlab. Si necesita interoperar con otro código Java que toma un 'Mapa', esto no funcionará. –