Сложно создать массив примитивов Java в Matlab, потому что Matlab хочет автоматически поместить его обратно в массив Matlab.
Что вы можете сделать, так это создать класс Java, который поможет вам, используя сигнатуры методов для управления автобоксом Matlab. Такой слой-обертка может быть быстрее и удобнее, чем обратный путь при экспорте текста.
package test;
/**
* Class to help build Java arrays from Matlab.
*/
public class JavaArrayBuilder {
/**
* Assign an array into a larger ragged array
* @param array ragged array you're building
* @param i index into array
* @param subarray this gets autoboxed to int[] from Matlab
*/
public static void assignIntArray(Object[] array, int i, int[] subarray) {
array[i] = subarray;
}
}
Тогда вы можете позвонить из Matlab следующим образом.
function ja = build_int_array
mynums = { 1:2, 1:5, 1:7 };
% Create a Java array of arrays
dummy = java.lang.Object();
ja = java.lang.reflect.Array.newInstance(dummy.getClass(), numel(mynums));
for i = 1:numel(mynums)
test.JavaArrayBuilder.assignIntArray(ja, i-1, mynums{i});
end
% Now you have a Java ragged array, albeit as Object[] instead of int[][]
После этого вам необходимо преобразовать массив Object [] в int [] [] в Java, поскольку Matlab распакует Java int [] [] обратно в массив Matlab. Хранение его как объекта [] в М-коде защищает его.
Вы также можете создать Список или другую Коллекцию, используя аналогичные оболочки. Это может лучше сочетаться с вашим другим Java-кодом, и коллекции не распаковываются в Matlab.