外部インタフェース/API | ![]() ![]() |
Javaオブジェクトの作成と利用
MATLABでは、そのクラスのコンストラクタの1つを呼び出すことによって、Javaオブジェクトを作成します。その後、コマンドとプログラミングステートメントを使って、これらのオブジェクトに対して操作します。JavaオブジェクトをMAT-ファイルに保存したり、その後のセッションでMATLABにリロードすることも可能です。
Javaオブジェクトの作成
クラスと同じ名前のJavaクラスコンストラクタを呼び出すことによって、JavaオブジェクトをMATLABで作成します。たとえば、つぎのコンストラクタは、タイトルが'Frame A'
であり、他のプロパティはデフォルト値であるFrame
オブジェクトを作成します。
frame = java.awt.Frame('Frame A');
新規のオブジェクトframe
を表示するのは、以下のステートメントです。
frame = java.awt.Frame[frame0,0,0,0x0,invalid,hidden,layout= java.awt.BorderLayout,resizable,title=Frame A]
本章のすべてのプログラミングの例題は、Javaオブジェクトコンストラクタを含みます。たとえば、「URLの読み込み」は、以下のコンストラクタを使ってjava.net.URL
オブジェクトを作成します。
url = java.net.URL(... 'http://www.ncsa.uiuc.edu/demoweb/url-primer.html')
javaObject関数の利用
ある状況においては、javaObject
関数を使ってJavaオブジェクトを作成する必要があります。つぎのシンタックスは、x1,...,xn
に一致する引数リストを使って、クラスclass_name
用にJavaコンストラクタを呼び出し、新規オブジェクトJ
を出力します。
J = javaObject('class_name
',x1,...,xn);
たとえば、クラスjava.lang.StringのJavaオブジェクトを作成し、出力するには、以下を使います。
strObj = javaObject('java.lang.String','hello');
デフォルトのMATLABコンストラクタのシンタックスは、入力クラス名のセグメントが31文字より長くないことが必要です(クラス名セグメントは、ピリオドの前、間、後のクラス名の部分です。たとえば、クラスjava.lang.String
には、3つのセグメントがあります)。31文字を超えるすべてのクラス名セグメントは、MATLABにより打ち切られます。まれな場合に、この長さのクラス名を使う必要があるときは、javaObject
を使ってクラスをインスタンスしなければなりません。
javaObject
関数を使って、実行時に作成されるオブジェクトに対するJavaクラスを指定することも可能です。この状況において、クラス名の引数の代わりに文字列変数を使ってjavaObject
を呼び出します。
class = 'java.lang.String'; text = 'hello'; strObj = javaObject(class, text);
通常の場合、インスタンスするクラスが開発時にわかっているときは、MATLABコンストラクタのシンタックスを使うとより便利です。たとえば、java.lang.String
オブジェクトを作成するには、以下を使います。
strObj = java.lang.String('hello');
注意
一般に、javaObject を使う必要はありません。JavaクラスをインスタンスするデフォルトのMATLABシンタックスは簡単で、ほとんどのアプリケーションに対して望ましいものです。主として、上記に説明した2つの場合に対してjavaObject を使ってください。 |
Javaオブジェクトは、MATLABのリファレンスです
MATLABでは、Javaオブジェクトはリファレンスであり、MATLABのcopy-on-assignmentおよびpass-by-valueのルールに従いません。たとえば、
origFrame = java.awt.Frame; setSize(origFrame, 800, 400); newFrameRef = origFrame;
上記の2番目のステートメントで、変数newFrameRef
は、origFrame
の2番目のリファレンスであり、オブジェクトのコピーではありません。上記の例のつぎのコードにおいて、newFrameRef
でのオブジェクトの変更は、origFrame
のオブジェクトを変更します。この影響は、オブジェクトがMATLABコードによって、あるいはJavaコードによって変更されるかどうかにより発生します。
つぎの例は、origFrame
とnewFrameRef
が両方共同じ要素のリファレンスであることを示します。フレームのサイズがあるリファレンス(newFrameRef
)によって変更されるとき、変更はもう1つのリファレンス(origFrame
)に反映されます。
setSize(newFrameRef, 1000, 800); getSize(origFrame) ans = java.awt.Dimension[width=1000,height=800]
![]() | MATLABでのJavaクラス名の簡略化 | Javaオブジェクトの結合 | ![]() |