Когда вы передаете 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 преобразует аргумент в String
Java объект. Вы также можете пройти
String
объект, возвращенный методом Java.
Если аргумент метода является массивом типов String
, затем передайте строковые массивы или массив ячеек векторов символов. MATLAB преобразует вход в массив String Java
объекты с размерностями, скорректированными как описано в разделе «Как размеры массивов влияют на преобразование».
Чтобы вызвать метод, который имеет аргумент, принадлежащий классу 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- |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Объект 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.