MWArray resultA = (MWNumericArray) results[0];
double[][] a = resultA.toDoubleArray(); // известно, что второй вывод является 3-мерным числовым массивом
MWArray resultB = (MWNumericArray) results[1];
Int[][][] b = resultB.toIntArray();
Для преобразования массива MATLAB в одномерный массив указанного примитивного типа данных используются следующие методы getTypeData: getByteData, getDoubleData, getFloatData, getlntData,
getLongData, getShortData, getlmagData, getlmagByteData,
getlmagDoubleData, getlmagFloatData, getlmaglntData, getlmagLongData, getlmagShortData
Для преобразования одного элемента массива MATLAB в примитивный тип Java можно также использовать методы getType(int) и getType(int[]), см. раздел 3.3.2.
Таблица 3.5.2 показывает соответствие типов данных MATLAB и типов Java, которое нужно учитывать при преобразовании. Отметим, что конверсионные правила применяются к скалярам, векторам, матрицам, и многомерным массивам перечисленных типов.
Таблица 3.5.2. Соответствие типов MATLAB и Java
Тип MATLAB |
Простой тип Java |
Тип Java Object |
cell |
Нет |
Object |
structure |
Нет |
Object |
char |
char |
java.lang.Character |
Таблица 3.5.2. Соответствие типов MATLAB и Java (окончание)
Тип MATLAB |
Простой тип Java |
Тип Java Object |
double |
double |
java.lang.Double |
single |
float |
java.lang.Float |
int8 |
byte |
java.lang.Byte |
int16 |
short |
java.lang.Short |
int32 |
int |
java.lang.Integer |
int64 |
long |
java.lang.Long |
uint8 |
byte |
java.lang.Byte |
uint16 |
short |
java.lang.short |
uint32 |
int |
java.lang.Integer |
uint64 |
long |
java.lang.Long |
logical |
boolean |
java.lang.Boolean |
Function handle |
Не поддерживается |
|
Java class |
Не поддерживается |
|
User class |
Не поддерживается |
Замечание. Массивы ячеек и структур не поддерживаются в Java, однако класс MWArray, созданный для Java Builder, поддерживает массивы ячеек MWCellArray и структур MWStructArray, так же как и другие массивы MWArray. Отметим также, что Java не имеет никаких типов без знака для представления типов uint8, uint16, uint32, и uint64, используемых в MATLAB. Конструкция и доступ к массивам MATLAB типа без знака требует преобразования. Дополнительную информацию о правилах преобразования см. в com.mathworks.toolbox.javabuilder.
3.5.4. Аргументы методов Java Builder
Обсудим некоторые вопросы, связанные с входными и выходными параметрами методов, созданных Java Builder.
Передача неопределенного числа параметров
Рассмотрим примеры использования m-функций, которые имеют параметры varargin или varargout. Для примера определим m-функцию, которая вычисляет сумму всех введенных слагаемых:
function y = mysum(varargin)
% MYSUM Returns the sum of the inputs.
y = sum([varargin{:}]);
Отметим, что слагаемые аргументы объединяются функцией MATLAB horzcat. Полэтому они должны иметь одинаковое число строк, но могут иметь разное число столбцов. В случае числовых и векторных аргументов находится их сумма, в случае матричных аргументов - находится сумма элементов столбцов.
Поскольку слагаемых может быть разное число, то вводы задаются через параметр varargin, что означает, что вызывающая программа может определить любое число вводов функции. Результат возвращается как скаляр double.