处理从 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 类型 - 数组 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
示例
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 类型 - 标量 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
如果返回参量是 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 数值函数,如 double
。double
函数采取的操作取决于您指定的对象的类。
如果对象是从
java.lang.Number
派生的类的实例,则 MATLAB 将对象转换为 MATLABdouble
。如果对象不是数值类的实例,则 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.awt.Polygon
对象的 Java 方法。该类定义字段 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 类型。将根据原始返回类型和 java.lang.Object 返回类型表对生成的元胞数组的元素进行转换。
假设您调用返回 java.lang.Double
、java.awt.Point
和 java.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'