| 外部インタフェース/API | ![]() |
オブジェクトをMATLABデータタイプに変換
クラスStringおよびクラスObjectのオブジェクトの例外においては、MATLABは、ネイティブなMATLABデータタイプのメソッド呼び出しから出力されたJavaオブジェクトを変換しません。JavaオブジェクトデータをMATLABで簡単で使いやすい形式に変換したい場合は、そのために利用可能なMATLAB関数が存在します。これらは、つぎの節で説明します。
MATLAB doubleデータタイプへの変換
MATLABでdoubleコマンドを使って、任意のJavaオブジェクトあるいはオブジェクトの配列をMATLABのdoubleデータタイプに変換することができます。doubleコマンドにより行われるアクションは、指定したオブジェクトのクラスにより異なります。
java.lang.Numberあるいはそのクラスから継承するクラスのいずれか)のインスタンスである場合は、MATLABはプリセット変換アルゴリズムを使ってオブジェクトをMATLABのdoubleに変換します。toDoubleというメソッドを実現するかどうかについてクラス定義をチェックします。MATLABは、toDoubleを使ってJavaオブジェクトからMATLABのdoubleデータタイプへの変換を行います。そのようなメソッドがこのクラスに対して実現される場合は、MATLABは実行して変換を行います。toDoubleメソッドを作成して、そのクラスのオブジェクトからMATLAB doubleへの変換を行うことができます。これにより、ユーザのクラスに属するオブジェクトに対するデータタイプの変換の手段を指定することができます。注意
指定したオブジェクトのクラスが、java.lang.Numberでなく、java.lang.Numberから継承されず、toDoubleソッドを実現しない場合は、doubleコマンドを使ってオブジェクトを変換しようとすると、MATLABでエラーになります。 |
doubleコマンドの構文は、以下に示す通りです。ここで、objectはJavaオブジェクトまたはJavaオブジェクトの配列です。
double(object);
MATLAB charデータタイプへの変換
MATLABのcharコマンドを使って、java.lang.Stringオブジェクトと配列をMATLABデータタイプに変換することができます。単一のjava.lang.Stringオブジェクトは、MATLABキャラクタ配列に変換されます。java.lang.Stringオブジェクトの配列は、各セルがキャラクタ配列であるMATLABセル配列に変換されます。
charコマンドで指定されたオブジェクトが、java.lang.Stringクラスでない場合は、MATLABは、toCharというメソッドを実現するかどうかについてそのクラスをチェックします。実現する場合は、MATLABはクラスtoCharのメソッドを実行して変換を行います。ユーザ独自の定義を作成する場合は、ユーザの必要に応じて変換を実行するtoCharメソッドを作成することにより、この機能を利用することができます。
注意
指定したオブジェクトのクラスが、java.lang.Stringでなく、toCharメソッドを実現しない場合は、charコマンドを使ってオブジェクトを変換しようとすると、MATLABでエラーになります。
|
charコマンドの構文は、以下に示す通りです。ここで、objectはJavaオブジェクトあるいはJavaオブジェクトの配列です。
char(object);
MATLAB構造体への変換
Javaオブジェクトは、オブジェクトの特性の多くがオブジェクト内で定義されたフィールド名によってアクセス可能である点がMATLAB構造体と同じです。MATLABでのデータの扱いを容易にするため、JavaオブジェクトをMATLAB構造体に変換したい場合があります。そのためには、オブジェクトに対してMATLABのstructコマンドを使ってください。
structコマンドの構文は、以下に示す通りです。ここで、objectはJavaオブジェクトあるいはJavaオブジェクトの配列です。
struct(object);
つぎの例は、java.awt.PolygonオブジェクトをMATLAB構造体に変換します。MATLABの構造体の演算を使ってオブジェクトのフィールドに直接アクセスできます。最終行は、三番目の配列要素に新しい値を置くために、配列pstruct.xpointsにインデックスを付けます。
polygon = java.awt.Polygon([14 42 98 124], [55 12 -2 62], 4);
pstruct = struct(polygon)
pstruct =
npoints: 4
xpoints: [4x1 int32]
ypoints: [4x1 int32]
pstruct.xpoints
ans =
14
42
98
124
pstruct.xpoints(3) = 101;
MATLABセル配列への変換
cellコマンドを使ってJava配列あるいはJavaオブジェクトをMATLABセル配列に変換します。結果のセル配列の要素は、Java配列要素またはJavaオブジェクトに最も近いMATLABタイプ(存在すれば)になります。
cell コマンドの構文は、以下の通りです。ここで、objectはJavaオブジェクトまたはオブジェクトのJava配列です。
cell(object);
下記の例で、MATLABセル配列は、各セルが異なるデータタイプの配列を保持して作成されます。1行目で使われるcellコマンドは、各タイプのオブジェクト配列をセル配列に変換します。
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');
% Convert each to cell arrays
cellArray = {cell(dblArray), cell(ptArray), cell(strArray)}
cellArray =
{1x10 cell} {3x1 cell} {2x2 cell}
cellArray{1,1} % Array of type double
ans =
[7] [14] [21] [28] [35] [42] [49] [56] [63] [70]
cellArray{1,2} % Array of type Java.awt.Point
ans =
[1x1 java.awt.Point]
[1x1 java.awt.Point]
[1x1 java.awt.Point]
cellArray{1,3} % Array of type char array
ans =
'one' 'two'
'three' 'four'
| Javaオブジェクト | プログラミングの例題 | ![]() |