外部インタフェース/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]
![]() | 文字列引数を渡す | その他のデータ変換のトピックス | ![]() |