Когда вы передаете данные MATLAB® в качестве аргументов к методам Java®, MATLAB преобразовывает данные в типы, которые лучше всего представляют данные языку Java. Для получения информации об отображении типа, когда передающие данные к аргументам типа java.lang
, смотрите Объекты Передачи Java.
Каждая строка в следующей таблице показывает тип MATLAB, сопровождаемый возможными соответствиями аргумента Java, слева направо в порядке близости соответствия. Типы MATLAB (кроме массивов ячеек) могут быть скалярными массивами (1 на 1) или матрицами. Типы Java могут быть скалярными значениями или массивами.
Аргумент MATLAB | Тип параметра Java (Скаляр или массив) Самый близкий тип <— — — — — — — — — — — — — — — — — — — — — — —> наименьшее закрывает тип | ||||||
---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||||
|
|
|
|
|
|
| |
|
|
|
|
|
| ||
|
|
|
|
| |||
|
|
|
| ||||
|
| ||||||
|
| ||||||
Объект 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 не поддерживает автоупаковку Java, автоматическое преобразование типов MATLAB на Java типы Object
. Например, MATLAB не преобразовывает double
в java.lang.Double
для параметра типа Double
.
java.lang.Object
Особый случай существует, когда метод берет аргумент класса java.lang.Object
. Поскольку этот класс является корнем иерархии класса Java, можно передать объекты любого класса в аргументе. MATLAB автоматически преобразовывает аргумент в самый близкий Java тип Object
, который может включать автоупаковку стиля Java. Эта таблица показывает преобразование.
Аргумент MATLAB | Java |
---|---|
|
|
|
|
|
|
Скаляр |
|
|
|
|
|
|
|
|
|
|
|
(Нескалярный) массив |
|
JavaObject | Неизменный аргумент |
cellArray |
|
Объект MATLAB | Неподдерживаемый |
Чтобы вызвать метод с аргументом, заданным как java.lang.Object
или массив java.lang.Object
, передайте или массив Java или массив ячеек MATLAB. MATLAB автоматически преобразовывает элементы массива ячеек в их типы Java, как описано в Передаче java.lang. Объектная таблица. Массив 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
- длина) массивы Java остаются неизменными.
MATLAB преобразовывает значения <missing>
в строках к null
.
При вызове перегруженного метода для объекта Java MATLAB сравнивает аргументы, которые вы передаете аргументам, заданным для методов. В этом контексте термин метод включает конструкторов. MATLAB определяет метод, чтобы вызвать и преобразовывает аргументы в типы Java согласно правилам преобразования Java. Для получения дополнительной информации смотрите Массив Передачи Объектов.
Когда вы вызываете метод Java, MATLAB гарантирует что:
Объект или класс (для статического метода) имеют метод тем именем.
Вызов передает то же количество аргументов по крайней мере одного метода с тем именем.
Каждый передаваемый аргумент преобразован в тип Java, заданный для метода.
Если все эти условия удовлетворены, то MATLAB вызывает метод.
В вызове перегруженного метода, если существует больше чем один кандидат, MATLAB выбирает тот с аргументами, которые лучше всего соответствуют аргументам вызова. Во-первых, MATLAB отклоняет методы, которые имеют типы аргумента, несовместимые с передаваемыми аргументами. Например, если метод имеет аргумент double
, аргумент char
несовместим.
MATLAB затем выбирает метод с самым высоким значением фитнеса, которое является суммой значений фитнеса всех его аргументов. Значение фитнеса для каждого аргумента является пригодностью базового типа минус различие между измерением массива MATLAB и измерением массива Java. Для получения информации о размерности массивов см. Как размерности массива влияют на преобразование. Если два метода имеют тот же фитнес, то первый, заданный в классе Java, выбран.