Указатели на данные, возвращенные из методов Java

Если Java® метод возвращает примитивный тип данных, затем MATLAB® преобразует данные, как показано в таблице в примитивных типах возврата.

Если сигнатура метода Java задает возврат данные типа java.lang.ObjectMATLAB преобразует возвращенный фактический тип, как показано в таблице в java.lang.Object Возврат Types.

MATLAB не преобразует другие объекты Java в типы MATLAB. Для получения информации об обработке этих данных смотрите Функции для преобразования объектов Java в типы MATLAB.

Примитивные типы возврата

MATLAB преобразует примитивные данные, возвращенные из метода Java, в типы, которые лучше всего представляют данные, в язык MATLAB. В этой таблице показано, как MATLAB преобразует данные. Для некоторых типов Java MATLAB обрабатывает скаляр, и массив возвращается по-разному.

Тип возврата JavaПолученный тип MATLAB - СкалярПолучившийся тип MATLAB - массив

boolean

logical

logical

byte

double

int8

short

double

int16

int

double

int32

long

double

int64

float

double

single

double

double

double

char

char

char

Пример

Подпись для java.lang.String метод toCharArray является:

public char[] toCharArray()

Вызов метода на String объект. MATLAB преобразует выход в char массив.

str = java.lang.String('hello');
res = str.toCharArray'
res =

  1×5 char array

hello

java.lang.Object Типы возврата

Когда объявляется метод Java для возврата данных типа java.lang.ObjectMATLAB преобразует его значение в зависимости от фактического возвращенного типа. В этой таблице показано, как MATLAB преобразует данные.

Фактический тип JavaПолученный тип MATLAB - Скаляр

java.lang.Boolean

logical

java.lang.Byte

double

java.lang.Short

double

java.lang.Integer

double

java.lang.Long

double

java.lang.Float

double

java.lang.Double

double

java.lang.Character

char

java.lang.String

char

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

Пример

См. следующую подпись для getData способ.

java.lang.Object getData()

Если getData возвращает java.lang.Integer объект, затем MATLAB преобразует значение в double.

Функции для преобразования объектов Java в типы MATLAB

MATLAB преобразует данные объекта только возврата значения, если задана сигнатура метода java.lang.Object. Если подпись задает любой другой тип объекта, MATLAB не преобразует значение. Для примера MATLAB преобразует возврат значение для этой сигнатуры метода:

java.lang.Object getData()

Но MATLAB не преобразует возврата значение для этого метода:

java.lang.String getData()

Чтобы преобразовать данные объекта Java в данные MATLAB, используйте функции MATLAB, как описано в следующих темах:

Преобразуйте в числовые типы MATLAB

Чтобы преобразовать числовые типы Java в типы MATLAB, используйте числовую функцию MATLAB, подобную double. Действия, предпринятые double функция зависит от класса заданного объекта.

  • Если объект является образцом класса, производного от java.lang.Number, затем MATLAB преобразует объект в MATLAB double.

  • Если объект не является образцом числового класса, MATLAB проверяет определение класса на toDouble способ. MATLAB вызывает этот метод для выполнения преобразования.

  • Если вы создаете свой собственный класс, то напишите toDouble метод для определения собственного преобразования типов.

Примечание

Если класс объекта не выведен из java.lang.Number и не реализует toDouble метод, затем double функция отображает сообщение об ошибке.

Преобразование в строки MATLAB

Преобразование java.lang.String объекты и массивы в строки MATLAB или векторы символов, используйте MATLAB string или char функция.

Если объект, заданный в функции MATLAB, не является образцом java.lang.String класс, затем MATLAB проверяет его определение класса на toString или toChar способ. Если вы создаете свой собственный класс, то напишите toString или toChar метод для задания преобразования строк.

Примечание

Если класс объекта не java.lang.String и не реализует toChar метод, затем char функция отображает сообщение об ошибке.

Преобразование в структуру MATLAB

Если класс Java задает имена полей, используйте struct функция для преобразования данных объекта в структуру MATLAB.

Предположим, что вы вызываете метод Java, который возвращает java.awt.Polygon объект. Класс определяет поля xpoints и ypoints. Чтобы запустить этот пример, создайте polygon переменная.

polygon = java.awt.Polygon([14 42 98 124],[55 12 -2 62],4);

Преобразуйте объект в структуру и отобразите координаты x, y для третьей точки.

pstruct = struct(polygon)
pstruct = 

  struct with fields:

    npoints: 4
    xpoints: [4×1 int32]
    ypoints: [4×1 int32]

Преобразуйте в массив ячеек MATLAB

Если ваши методы Java возвращают различные типы данных, используйте cell функция для преобразования данных в типы MATLAB. Элементы получившегося массива ячеек преобразуются в соответствии с таблицами Primitive Return Types и java.lang.Object Возврат Types.

Предположим, что вы вызываете методы Java, которые возвращают аргументы типа java.lang.Double, java.awt.Point, и java.lang.String. Чтобы запустить этот пример, создайте переменные этих типов.

import java.lang.* java.awt.*

% Create a Java array of double
dblArray = javaArray('java.lang.Double',1,10);
for m = 1:10
   dblArray(1,m) = Double(m * 7);
end

% Create a Java array of points
ptArray = javaArray('java.awt.Point',3);
ptArray(1) = Point(7.1,22);
ptArray(2) = Point(5.2,35);
ptArray(3) = Point(3.1,49);

% Create a Java array of strings
strArray = javaArray('java.lang.String',2,2);
strArray(1,1) = String('one');
strArray(1,2) = String('two');
strArray(2,1) = String('three');  
strArray(2,2) = String('four');

Преобразуйте каждый массив в массив ячеек. Можно использовать cellArray в функциях MATLAB.

cellArray = {cell(dblArray),cell(ptArray),cell(strArray)}
cellArray =

  1×3 cell array

    {1×10 cell}    {3×1 cell}    {2×2 cell}

Каждая камера содержит массив другого типа. Отображение содержимого.

cellArray{1,1}       % Array of type double
ans =

  1×10 cell array

    [7]    [14]    [21]    [28]    [35]    [42]    [49]    [56]    [63]    [70]
cellArray{1,2}       % Array of type Java.awt.Point
ans =

  3×1 cell array

    [1×1 java.awt.Point]
    [1×1 java.awt.Point]
    [1×1 java.awt.Point]
cellArray{1,3}       % Array of type char array
ans =

  2×2 cell array

    'one'      'two' 
    'three'    'four'

Похожие темы