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