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'