外部インタフェース/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オブジェクト | プログラミングの例題 | ![]() |