При передаче данных MATLAB ® в качестве аргументов методам Java ® MATLAB преобразует данные в типы, которые наилучшим образом представляют данные на языке Java. Сведения о сопоставлении типов при передаче данных аргументам типаjava.lang, см. раздел Передача объектов Java.
Каждая строка в следующей таблице показывает тип MATLAB, за которым следуют возможные совпадения аргументов Java, слева направо в порядке близости совпадения. Типы MATLAB (кроме массивов ячеек) могут быть скалярными (1 на 1) массивами или матрицами. Типы Java могут быть скалярными значениями или массивами.
| Аргумент MATLAB | Тип параметра Java (скалярный или массив) Ближайший тип < - - - - - - - - - - - - - - - - - - - - - - - - - > Тип наименьшего закрытия | ||||||
|---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||||
|
|
|
|
|
|
| |
|
|
|
|
|
| ||
|
|
|
|
| |||
|
|
|
| ||||
|
| ||||||
|
| ||||||
Объект Java типа | Ява | любой суперкласс | |||||
массив ячеек объекта |
| ||||||
Объект MATLAB | Неподдержанный | ||||||
Размерность термина означает количество подстрочных индексов, необходимых для обращения к элементам массива. Например, массив 5 на 1 имеет одно измерение, поскольку отдельные элементы индексируются с помощью одного подстрочного индекса массива.
При преобразовании MATLAB в массивы Java MATLAB обрабатывает размерность особым образом. Для массива MATLAB размерность - это количество несинглтон размерностей в массиве. Например, массив 10 на 1 имеет размер 1. В то время как массив 1 на 1 имеет размерность 0, поскольку нельзя индексировать в скалярное значение. В коде Java размерность определяется количеством вложенных массивов. Например, double[][] имеет размерность 2, и double имеет измерение 0.
Если количество измерений массива Java соответствует количеству измерений в массиве MATLAB n, то преобразованный массив Java имеет n размеры. Если массив Java содержит менее n размеры, затем преобразование сбрасывает одиночные размеры, начиная с первого. Преобразование останавливается, когда количество оставшихся измерений соответствует количеству измерений в массиве Java. Если массив Java имеет более n измерений, то MATLAB добавляет конечные одиночные измерения.
При передаче целочисленного типа методу Java, принимающему целочисленный параметр Java, преобразование MATLAB совпадает с преобразованием Java между целочисленными типами. В частности, если целое число выходит за пределы диапазона, оно не укладывается в число битов типа параметра. Для целых чисел вне диапазона MATLAB отбрасывает все самые низкие n биты. Стоимость n - количество битов в типе параметра. Это преобразование отличается от преобразования между целочисленными типами MATLAB, где целые числа вне диапазона преобразуются в максимальное или минимальное значение, представленное типом назначения.
Если аргумент является числом с плавающей запятой, MATLAB не преобразует его в целое число таким же образом, как Java. MATLAB сначала преобразует число с плавающей запятой в 64-битное целое число со знаком с усеченной дробной частью. Затем номер обрабатывается так, как если бы он был int64 аргумент.
Число с плавающей запятой слишком велико, чтобы его можно было представить в 64-разрядном целом числе (за пределами диапазона от -263 до 263. В этом случае MATLAB использует следующие преобразования:
int, short, и byte значения параметров для 0.
long значения параметров для java.lang.Long.MIN_VALUE.
Inf и -Inf значения для -1.
NaN значения для 0.
Вызов метода Java с аргументом, определенным как java.lang.Stringпередайте строку или символьный вектор MATLAB. MATLAB преобразует аргумент в Java String объект. Вы также можете передать String возвращенный методом Java.
Если аргумент метода является массивом типа String, затем передать строковый массив или массив ячеек символьных векторов. MATLAB преобразует входные данные в массив Java String с размерами, скорректированными, как описано в разделе Как размеры массива влияют на преобразование.
Вызов метода, имеющего аргумент, принадлежащий классу Java (кроме java.lang.Object), необходимо передать объект Java, который является экземпляром этого класса. MATLAB не поддерживает автоматическое преобразование типов MATLAB в Java Object типы. Например, MATLAB не преобразует double кому java.lang.Double для параметра типа Double.
java.lang.ObjectОсобый случай существует, когда метод принимает аргумент java.lang.Object класс. Поскольку этот класс является корнем иерархии классов Java, в аргумент можно передавать объекты любого класса. MATLAB автоматически преобразует аргумент в ближайший Java Object тип, который может включать в себя автобоксирование в стиле Java. В этой таблице показано преобразование.
Аргумент MATLAB | Ява |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Объект Java | Аргумент не изменен |
массив ячеек |
|
Объект MATLAB | Неподдержанный |
Вызов метода с аргументом, определенным как java.lang.Object или массив java.lang.Objectпередайте массив Java или массив ячеек MATLAB. MATLAB автоматически преобразует элементы массива ячеек в их типы Java, как описано в таблице Pass java.lang.Object. Массив Java - это массив, возвращаемый конструктором Java. Также можно создать массив Java в MATLAB с помощью javaArray функция.
Для создания массива ячеек объектов Java используется синтаксис MATLAB {a1,a2,...}. Индексация в массив ячеек объектов Java выполняется обычным способом с использованием синтаксиса a{m,n,...}. Например, создать массив ячеек A:
a1 = java.lang.Double(100);
a2 = java.lang.Float(200);
A = {a1,a2}
A =
1×2 cell array
[1×1 java.lang.Double] [1×1 java.lang.Float]MATLAB преобразует пустую матрицу следующим образом.
Если аргумент является пустым символьным вектором и параметр объявляется как String, то MATLAB проходит в пустой (не null) Java String объект.
Во всех остальных случаях MATLAB преобразует пустой массив в Java null.
Пустое (0-length) Массивы Java остаются неизменными.
Преобразование MATLAB <missing> значения в строках для null.
При вызове перегруженного метода для объекта Java MATLAB сравнивает передаваемые аргументы с аргументами, определенными для методов. В этом контексте термин «метод» включает в себя конструкторы. MATLAB определяет метод для вызова и преобразует аргументы в типы Java в соответствии с правилами преобразования Java. Дополнительные сведения см. в разделе Массив объектов передачи.
При вызове метода Java MATLAB обеспечивает следующее:
Объект или класс (для статического метода) имеет метод с таким именем.
Вызов передает одинаковое количество аргументов по крайней мере одного метода с таким именем.
Каждый переданный аргумент преобразуется в тип Java, определенный для метода.
Если все эти условия выполнены, MATLAB вызывает метод.
При вызове перегруженного метода, если существует более одного кандидата, MATLAB выбирает тот из них, который наилучшим образом соответствует вызывающим аргументам. Во-первых, MATLAB отклоняет методы, типы аргументов которых несовместимы с переданными аргументами. Например, если метод имеет double аргумент, a char несовместим.
Затем MATLAB выбирает метод с наивысшим значением пригодности, которое является суммой значений пригодности всех его аргументов. Значением пригодности для каждого аргумента является пригодность базового типа минус разница между измерением массива MATLAB и измерением массива Java. Сведения о размерности массива см. в разделе Как размеры массива влияют на преобразование. Если два метода имеют одинаковую пригодность, то выбирается первый, определенный в классе Java.