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

JavaObject из типа 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

JavaObject в пакете 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[]

JavaObject

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

cellArray

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- длина), массивы Java остаются неизменными.

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

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

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

Когда вы вызываете метод Java, MATLAB гарантирует что:

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

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

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

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

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

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

Похожие темы