Java オブジェクトのインスタンスを作成するには、cfobject タグを使用します。また、オブジェクトのプロパティ (属性) やメソッド (オペレーション) を呼び出すには、cfset や cfoutput などの ColdFusion タグか、または CFScript を使用します。
メソッドの引数および戻り値は、単純な配列やオブジェクトなどの有効な Java タイプであればどのようなタイプでもかまいません。ColdFusion では、文字列を引数として渡した場合は適切に変換されますが、文字列を戻り値として受け取った場合は適切に変換されません。タイプ変換の問題の詳細については、Java および ColdFusion のデータタイプの変換を参照してください。
次の項で示す例では、(1) cfobject タグの name 属性に値 "obj" が指定されており、(2) このオブジェクトには "Property" という名前のプロパティがあり、(3) "Method1"、"Method2"、および "Method3" というメソッドが呼び出されたということを前提としています。
メモ: cfdump タグは、オブジェクトのパブリックメソッドおよびデータを表示します。
次の項では、Java オブジェクトの呼び出し方法について説明します。
cfobject タグを使用すると、ColdFusion MX で Java オブジェクトが利用可能になります。cfobject タグにより、JVM クラスパス上か、または次のいずれかの場所にある Java クラスにアクセスできるようになります。
次に例を示します。
<cfobject type="Java" class="MyClass" name="myObj">
クラスは cfobject タグによってロードされますが、インスタンスオブジェクトは作成されません。スタティックメソッドおよびフィールドは、cfobject の呼び出し直後にアクセス可能です。
そのオブジェクトに対して init メソッドを呼び出す前にスタティックでないパブリックメソッドを呼び出すと、ColdFusion によってデフォルトコンストラクタの暗黙的な呼び出しが行われます。
オブジェクトコンストラクタを明示的に呼び出すには、cfobject タグを使用した後、特別な ColdFusion init メソッドと共に適切な引数を使用します。
<cfobject type="Java" class="MyClass" name="myObj">
<cfset ret=myObj.init(arg1, arg2)>
メモ: この init メソッドはオブジェクトのメソッドではなく、クラスコンストラクタに対して new 関数を呼び出すための ColdFusion 識別子です。したがって、Java オブジェクトに init メソッドがある場合は、名前が重複するため、そのオブジェクトの init メソッドを呼び出すことはできません。
オブジェクトに継続的にアクセスするには、init 関数を使用する必要があります。これは、init 関数がオブジェクトのインスタンスへのリファレンスを返すのに対し、cfobject はそれを返さないためです。
cfobject を使用して作成されたオブジェクト、または他のオブジェクトによって返されたオブジェクトは、ColdFusion ページ実行の最後に暗黙的に解放されます。
オブジェクトが次のいずれかのアクションを実行する場合は、次のコーディングシンタックスを使用してプロパティにアクセスします。
<cfset obj.property = "somevalue">
<cfset value = obj.property>
メモ: ColdFusion では、プロパティおよびメソッド名を大文字に統一する必要はありません。ただし、一貫性を確保するには、ColdFusion でも Java と同様に大文字と小文字を区別してください。
オブジェクトメソッドは通常、0 個以上の引数を取ります。メソッドには、値を返すものと返さないものがあります。次の方法を使用してメソッドを呼び出します。
cfset タグのように、メソッド名に空の括弧を続けます。
<cfset retVal = obj.Method1()>
<cfset x = 23> <cfset retVal = obj.Method1(x, "a string literal")>
メモ: Java メソッドを呼び出す場合は、使用するデータのタイプが重要です。詳細については、Java および ColdFusion のデータタイプの変換を参照してください。
Java クラスが JavaBeans パターンに一致している場合、ColdFusion は、getPropertyName() および setPropertyName(value) メソッドを自動的に呼び出すことができます。したがって、メソッドを明示的に呼び出さなくても、プロパティを直接参照することでプロパティの設定および取得を行うことができます。
たとえば、myFishTank クラスが JavaBean である場合、次のコードは、myFish オブジェクトに対する getTotalFish() メソッド呼び出しの結果を返します。
<cfoutput> 現在、水槽の中に #myFish.TotalFish# 匹の魚がいます。 </cfoutput>
次の例では、setGuppyCount(int number) メソッドを暗黙的に呼び出して、グッピーを myFish オブジェクトに追加します。
<cfset myFish.GuppyCount = myFish.GuppyCount + 1>
メモ: 直接参照メソッドを使用すると、getProperty および setProperty メソッドを持つクラスで値の取得や設定ができますが、JavaBeans パターンに完全に準拠しているわけではありません。また、この方法は、getProperty および setProperty メソッドを持つすべてのクラスに使用できるわけではありません。たとえば、標準 Java クラス (Date、Boolean、Short、Integer、Long、Float、Double、Char、Byte、String、List、Array) またはこれらのクラスから派生したクラスを直接参照することはできません。
ColdFusion では、ネストされた (スコープが指定されている) オブジェクトの呼び出しがサポートされています。たとえば、オブジェクトメソッドが他のオブジェクトを返し、そのオブジェクト上のプロパティまたはメソッドを呼び出す必要がある場合は、次のシンタックスを使用できます。
<cfset prop = myObj.X.Property>
同様に、次の CFScript 行のようなコードを使用できます。
GetPageContext().include("hello.jsp?name=Bobby");
このコードでは、ColdFusion の GetPageContext 関数が Java PageContext オブジェクトを返し、この行が PageContext オブジェクトの include メソッドを呼び出します。
ColdFusion MX 7 | ColdFusion MX 6.1 | ColdFusion MX* | ColdFusion 5* | フォーラム* | デベロッパーセンター | サポート情報 | バグ報告
バージョン7