| 外部インタフェース/API | ![]() |
Javaオブジェクトを渡す
特定のJavaクラスに属する引数を持つメソッドを呼び出すとき、そのクラスのインスタンスのオブジェクトを渡す必要があります。下記の例で、java.awt.Menuクラスに属するaddメソッドは、引数としてjava.awt.MenuItemクラスのオブジェクトが必要です。このメソッド宣言は、以下の通りです。
public MenuItem add(MenuItem mi)
この例は、「組み込みデータタイプを渡す」の説明の例で作成されたフレームに対して操作します。このコードの2,3,4行目は、既存のウィンドウフレームに貼り付けるメニューのアイテムを追加します。menu1.addの呼び出しの各々において、java.awt.MenuItem Javaクラスであるオブジェクトが渡されます。
menu1 = java.awt.Menu('File Options');
menu1.add(java.awt.MenuItem('New'));
menu1.add(java.awt.MenuItem('Open'));
menu1.add(java.awt.MenuItem('Save'));
menuBar=java.awt.MenuBar;
menuBar.add(menu1);
frame.setMenuBar(menuBar);
クラスjava.lang.Objectのオブジェクトの取り扱い
呼び出されるメソッドがjava.lang.Objectクラスの引数を持つときには、特殊な場合が存在します。このクラスは、Javaクラス階層のルートなので、引数内の任意のクラスのオブジェクトを渡すことができます。以下のハッシュテーブルの例は、異なるクラスに属するオブジェクトを、java.lang.Objectの引数を要求する共通のメソッドputに渡します。putに対するメソッドの宣言は、以下の通りです。
public synchronized Object put(Object key, Object value)
つぎのMATLABコードは、異なるタイプのオブジェクト(boolean, float, string)をputメソッドに渡します。
hTable = java.util.Hashtable;
hTable.put(0, java.lang.Boolean('TRUE'));
hTable.put(1, java.lang.Float(41.287));
hTable.put(2, java.lang.String('test string'));
hTable % Verify hash table contents
hTable =
{1.0=41.287, 2.0=test string, 0.0=true}
java.lang.Objectを受け取るメソッドに引数を渡すときには、組み込みデータタイプのオブジェクトに対するクラス名を指定する必要はありません。上記の例の3行目は、41.287はクラスjava.lang.Floatであることを指定します。これは省略が可能で、下記の例のように単に41.287とすることができます。そのため、MATLABは各引数に対して最もマッチするJavaオブジェクト表現を選択して、各オブジェクトを作成します。上記の例の3回のputの呼び出しは、つぎのように書き直すことができます。
hTable.put(0, 1); hTable.put(1, 41.287); hTable.put(2, 'test string');
配列にオブジェクトを渡す
Javaメソッドに渡すことが可能なJavaオブジェクト配列には、Java配列とMATLABセル配列の2つのタイプがあります。
オブジェクトが既に配列内に置かれている場合は(Javaコンストラクタから出力される配列あるいはjavaArray関数によってMATLABで作成された配列)、呼び出されるメソッドの引数のように、単純に渡します。これは、既にJava配列なので、MATLABは変換を行いません。
Java配列にないオブジェクトを持つ場合は、MATLABは、MATLABセル配列にそれらを渡すことができます。この場合、MATLABは引数を渡す前にセル配列をJava配列に変換します。
つぎの例は、クラスjava.awt.Pointの配列を受け取るユーザ定義クラスのmapPointsメソッドを示します。これに対するメソッドの宣言は、以下の通りです。
public Object mapPoints(java.awt.Point p[])
下記のMATLABコードは、4つのJava Pointオブジェクトを含む2行2列のセル配列を作成します。セル配列がmapPointsメソッドに渡されるとき、MATLABはセル配列をタイプjava.awt.PointのJava配列に変換します。
pointObj1 = java.awt.Point(25,143);
pointObj2 = java.awt.Point(31,147);
pointObj3 = java.awt.Point(49,151);
pointObj4 = java.awt.Point(52,176);
cellArray={pointObj1, pointObj2; pointObj3, pointObj4}
cellArray =
[1x1 java.awt.Point] [1x1 java.awt.Point]
[1x1 java.awt.Point] [1x1 java.awt.Point]
testData.mapPoints(cellArray);
Javaオブジェクトのセル配列の取り扱い
MATLABシンタックス{a1,a2,...}を使ってJavaオブジェクトのセル配列を作成します。通常の方法であるシンタックスa{m,n,...}で、Javaオブジェクトのセル配列にインデックスを付けます。
つぎの例は、2つのFrameオブジェクト、frame1とframe2のセル配列を作成し、変数framesを割り当てます。
frame1 = java.awt.Frame('Frame A');
frame2 = java.awt.Frame('Frame B');
frameArray = {frame1, frame2}
frameArray =
[1x1 java.awt.Frame] [1x1 java.awt.Frame]
つぎのステートメントは、セル配列frameArrayの要素{1,2}を変数fに割り当てます。
f = frameArray {1,2}
f =
java.awt.Frame[frame2,0,0,0x0,invalid,hidden,layout =
java.awt.BorderLayout,resizable,title=Frame B]
| 文字列引数を渡す | その他のデータ変換のトピックス | ![]() |