Передача данных методам Java

Тип MATLAB к отображению типа Java

Когда вы передаете данные MATLAB® в качестве аргументов к методам Java®, MATLAB преобразовывает данные в типы, которые лучше всего представляют данные языку Java. Для получения информации об отображении типа, когда передающие данные к аргументам типа java.lang, смотрите Объекты Передачи Java.

Каждая строка в следующей таблице показывает тип MATLAB, сопровождаемый возможными соответствиями аргумента Java, слева направо в порядке близости соответствия. Типы MATLAB (кроме массивов ячеек) могут быть скалярными массивами (1 на 1) или матрицами. Типы Java могут быть скалярными значениями или массивами.

Аргумент MATLAB

Тип параметра Java (Скаляр или массив)
Типы кроме объекта

Самый близкий тип <— — — — — — — — — — — — — — — — — — — — — — —> наименьшее закрывает тип

logical

boolean

byte

short

int

long

float

double

double

double

float

long

int

short

byte

boolean

single

float

double

     

uint8
int8

byte

short

int

long

float

double

 

uint16
int16

short

int

long

float

double

  

uint32
int32

int

long

float

double

   

uint64
int64

long

float

double

    

скаляр строки,
символьный вектор,
Скаляр char

String

      

stringArray,
массив ячеек из символьных векторов
Смотрите аргументы строки передачи.

String[]

      

Объект Java типа jClass

Java Object типа jClass

любой суперкласс jClass

     

массив ячеек объекта

Object[]

      

Объект 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 (кроме 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 Object в пакете java.lang

logical

Boolean

double

Double

single

Float

Скаляр char

Character

скаляр строки
непустой вектор char

String

uint8
int8

Byte

uint16
int16

Short

uint32
int32

Integer

uint64
int64

Long

(Нескалярный) массив string
массив ячеек из символьных векторов

String[]

JavaObject

Неизменный аргумент

cellArray

Object[]

Объект MATLAB

Неподдерживаемый

Передача массива объектов

Чтобы вызвать метод с аргументом, заданным как java.lang.Object или массив java.lang.Object, передайте или массив Java или массив ячеек MATLAB. MATLAB автоматически преобразовывает элементы массива ячеек в их типы Java, как описано в Передаче java.lang. Объектная таблица. Массив Java является массивом, возвращенным от конструктора Java. Также можно создать массив Java в MATLAB с помощью функции javaArray.

Передача массива ячеек объектов Java

Чтобы создать массив ячеек объектов 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 гарантирует что:

  1. Объект или класс (для статического метода) имеют метод тем именем.

  2. Вызов передает то же количество аргументов по крайней мере одного метода с тем именем.

  3. Каждый передаваемый аргумент преобразован в тип Java, заданный для метода.

Если все эти условия удовлетворены, то MATLAB вызывает метод.

В вызове перегруженного метода, если существует больше чем один кандидат, MATLAB выбирает тот с аргументами, которые лучше всего соответствуют аргументам вызова. Во-первых, MATLAB отклоняет методы, которые имеют типы аргумента, несовместимые с передаваемыми аргументами. Например, если метод имеет аргумент double, аргумент char несовместим.

MATLAB затем выбирает метод с самым высоким значением фитнеса, которое является суммой значений фитнеса всех его аргументов. Значение фитнеса для каждого аргумента является пригодностью базового типа минус различие между измерением массива MATLAB и измерением массива Java. Для получения информации о размерности массивов см. Как размерности массива влияют на преобразование. Если два метода имеют тот же фитнес, то первый, заданный в классе Java, выбран.

Похожие темы