exponenta event banner

Передача данных в методы 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

    

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

String

      

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

String[]

      

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

Ява 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 не поддерживает автоматическое преобразование типов MATLAB в Java Object типы. Например, MATLAB не преобразует double кому java.lang.Double для параметра типа Double.

Проход java.lang.Object

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

Аргумент MATLAB

Ява Object в упаковке java.lang

logical

Boolean

double

Double

single

Float

char скаляр

Character

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

String

uint8
int8

Byte

uint16
int16

Short

uint32
int32

Integer

uint64
int64

Long

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

String[]

Объект Java

Аргумент не изменен

массив ячеек

Object[]

Объект MATLAB

Неподдержанный

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

Вызов метода с аргументом, определенным как java.lang.Object или массив java.lang.Objectпередайте массив Java или массив ячеек MATLAB. MATLAB автоматически преобразует элементы массива ячеек в их типы Java, как описано в таблице Pass java.lang.Object. Массив 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-length) Массивы Java остаются неизменными.

Преобразование MATLAB <missing> значения в строках для null.

Перегруженные методы

При вызове перегруженного метода для объекта Java MATLAB сравнивает передаваемые аргументы с аргументами, определенными для методов. В этом контексте термин «метод» включает в себя конструкторы. MATLAB определяет метод для вызова и преобразует аргументы в типы Java в соответствии с правилами преобразования Java. Дополнительные сведения см. в разделе Массив объектов передачи.

При вызове метода Java MATLAB обеспечивает следующее:

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

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

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

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

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

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

Связанные темы