Main Content

处理从 Java 方法返回的数据

如果 Java® 方法返回原始数据类型,则 MATLAB® 将转换数据,如原始返回类型中的表所示。

如果 Java 方法签名指定 java.lang.Object 类型的返回数据,则 MATLAB 会转换返回的实际类型,如 java.lang.Object 返回类型中的表所示。

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.Object 类型的数据时,MATLAB 根据返回的实际类型转换其值。下表说明 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 将根据上表对值进行转换。有关详细信息,请参阅Converting Object Array Elements to MATLAB Types

示例

请参阅 getData 方法的以下签名。

java.lang.Object getData()

如果 getData 返回 java.lang.Integer 对象,则 MATLAB 将值转换为 double

Java 对象转换为 MATLAB 类型的函数

如果方法签名指定 java.lang.Object,MATLAB 将仅转换对象数据返回值。如果签名指定任何其他对象类型,则 MATLAB 不会转换该值。例如,MATLAB 会转换以下方法签名的返回值:

java.lang.Object getData()

但 MATLAB 不会转换以下方法的返回值:

java.lang.String getData()

要将 Java 对象数据转换为 MATLAB 数据,请按以下主题所述使用 MATLAB 函数:

转换为 MATLAB 数值类型

要将 Java 数值类型转换为 MATLAB 类型,请使用 MATLAB 数值函数,如 doubledouble 函数采取的操作取决于您指定的对象的类。

  • 如果对象是从 java.lang.Number 派生的类的实例,则 MATLAB 将对象转换为 MATLAB double

  • 如果对象不是数值类的实例,则 MATLAB 会检查 toDouble 方法的类定义。MATLAB 调用此方法来执行转换。

  • 如果您创建自己的类,则请编写一个 toDouble 方法来指定您自己的类型转换。

注意

如果对象的类不是从 java.lang.Number 派生的,并且它不实现 toDouble 方法,则 double 函数会显示错误消息。

转换为 MATLAB 字符串

要将 java.lang.String 对象和数组转换为 MATLAB 字符串或字符向量,请使用 MATLAB stringchar 函数。

如果 MATLAB 函数中指定的对象不是 java.lang.String 类的实例,则 MATLAB 会检查它对 toStringtoChar 方法的类定义。如果您创建自己的类,则请编写一个 toStringtoChar 方法来指定字符串转换。

注意

如果对象的类不是 java.lang.String 并且它不实现 toChar 方法,则 char 函数会显示错误消息。

转换为 MATLAB 结构体

如果 Java 类定义了字段名称,则请使用 struct 函数将对象数据转换为 MATLAB 结构体。

假设您调用一个返回 java.awt.Polygon 对象的 Java 方法。该类定义字段 xpointsypoints。为了运行此示例,请创建一个 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 类型。将根据原始返回类型java.lang.Object 返回类型表对生成的元胞数组的元素进行转换。

假设您调用返回 java.lang.Doublejava.awt.Pointjava.lang.String 类型参量的 Java 方法。为了运行此示例,请创建这些类型的变量。

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');

将每个数组转换为一个元胞数组。您可以使用 MATLAB 函数中的 cellArray

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'

相关主题