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 は表に従って値を変換します。詳細については、オブジェクトの配列要素の 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 型に変換するには、double
などの数値に関する MATLAB 関数を使用します。関数 double
による動作は、指定するオブジェクトのクラスによって異なります。
オブジェクトが
java.lang.Number
から派生するクラスのインスタンスの場合、MATLAB はオブジェクトを MATLABdouble
に変換します。オブジェクトが数値クラスのインスタンスではない場合、MATLAB はクラス定義に
toDouble
メソッドがあるかどうかを確認します。MATLAB はこのメソッドを呼び出して変換を実行します。独自のクラスを作成する場合、
toDouble
メソッドを記述して独自の型変換を指定します。
メモ
オブジェクトのクラスが java.lang.Number
から派生しておらず、toDouble
メソッドを実装していない場合、関数 double
はエラー メッセージを表示します。
MATLAB string への変換
java.lang.String
オブジェクトおよび配列を MATLAB の string または文字ベクトルに変換するには、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);
オブジェクトを構造体に変換し、3 番目の点の x,y 座標を表示します。
pstruct = struct(polygon)
pstruct = struct with fields: npoints: 4 xpoints: [4×1 int32] ypoints: [4×1 int32]
MATLAB cell 配列への変換
Java メソッドから異なる型のデータが返される場合、関数 cell
を使用してデータを MATLAB 型に変換します。結果の cell 配列の要素は、プリミティブ型の戻り値および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');
各配列を cell 配列に変換します。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'