exponenta event banner

Обработка данных, возвращенных методами Java

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

Если сигнатура метода Java указывает возвращаемые данные типа java.lang.Objectзатем MATLAB преобразует возвращенный фактический тип, как показано в таблице java.lang.Object Return 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 Return 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'

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