JavaCast

説明

Java オブジェクトまたは .NET オブジェクトに引数として渡すために、ColdFusion 変数のデータ型を指定された Java 型に変換します。スカラー、文字列、および配列の引数のみに使用します。

戻り値

type で指定された型の変数

カテゴリ

文字列関数

関数のシンタックス

JavaCast(type, variable)

履歴

ColdFusion MX 8: bigdecimal、byte、char、および short データ型に対するサポートと、配列のキャストに対するサポートが追加されました。

ColdFusion MX 7: null に対するサポートが追加されました。

関連項目

CreateObjectcfobject、『ColdFusion アプリケーションの開発』のConverting between .NET and ColdFusion data typesおよびJava and ColdFusion data type conversions

パラメータ

パラメータ

説明

type

変換後の変数のデータ型です。

  • bigdecimal (java.math.BigDecimal に変換)

  • boolean

  • byte

  • char

  • int

  • long

  • float

  • double

  • short

  • string

  • null

  • xxx[] xxx の部分では、次のいずれかを指定します。

  • 上記のいずれかの型 (null を除く)

  • Java クラス名

variable

スカラーまたは文字列のタイプを保持する ColdFusion 変数です。type が null の場合、"" でなければなりません。

使用方法

このメソッドを使用すると、型の変換処理が不明瞭な場合に Java または .NET メソッドの呼び出すときに使用する変数の Java データ型を指定できます。たとえば、メソッドがオーバーロードされていてパラメータの型のみが異なる場合や、.NET メソッドが System.Object クラスのパラメータを取るように宣言されている場合などに使用できます。

cfobject タグで Java オブジェクトを作成してから、そのメソッドの 1 つを呼び出すまでの間に使用します。メソッドがオーバーロードされた引数を複数取る場合は、各引数について JavaCast を呼び出します。JavaCast は、メソッドがオーバーロードされている場合にのみ使用します。これは、メソッドがさまざまな数の引数を取るためではなく、引数が複数のデータ型を取るためです。

JavaCast は、複雑なオブジェクト間のキャストや、上位クラスへのキャストには使用できません。

内部に保管された ColdFusion 型と Java スカラー型の間に 1 対 1 の対応関係がないために、実行できない変換もあります。

この関数の結果は、Java または .NET オブジェクトの呼び出しにのみ使用します。次の例では、Java メソッドを呼び出す際の使い方を示します。

<cfscript> 
     x = CreateObject("java", "test.Hello"); 
     x.init(); 
     ret = x.sayHello(JavaCast("null", "")); 
</cfscript>
注意: JavaCast("null","") の結果を ColdFusion 変数に割り当てないでください。予期しない結果が生じます。

JavaCast(type[], variable) という形式を使用すると、指定された型の 1 次元配列に ColdFusion 配列変数がキャストされます。多次元配列には変換できません。プリミティブ型またはクラス名をキャスト先の型として指定できます。たとえば、次の形式を使用すると、ColdFusion 配列を vom.x.yMyClass オブジェクトの配列にキャストできます。

javacast("vom.x.y.MyClass[]", myCFArr)

次のような場合は、JavaCast の最初のパラメータで配列を使用します。

  • パラメータ数が同じでシグネチャが異なる 2 つの関数があり、それぞれのシグネチャにおいてパラメータが取る配列の型が異なる場合 (たとえば、foo(int[] x) 関数と foo(String[] strs) 関数がある場合)。

  • メソッドパラメータのシグネチャでクラス配列が要求されている場合 (例 : foo(com.x.y.MyClass[]))。

  • メソッドパラメータのシグネチャでオブジェクトが要求されていて、特定の型の配列を渡す必要がある場合。

    次の例では、JavaCast 関数を使用して配列をキャストする方法を示します。

    次の 2 つのメソッドが定義されている fooClass クラスがあるとします (それぞれ、第 1 引数の配列の型が異なります)。

    public class fooClass { 
        public fooClass () { 
        } 
        public String foo(long[] arg) { 
    return "Argument was a long array"; 
        } 
        public String foo(int[] arg) { 
    return "Argument was an Integer array"; 
        } 
    }

    これらの関数を CFML で使用するには、次のコード例に示すように、JavaCast 関数を使用して ColdFusion 配列を適切な配列型に変換します。

    <cfset arr = [1,2,4,20,10]> 
    <cfset fooObj = createObject("java", "fooClass")> 
     
    <cfset fooObj.foo(javacasr("int[]", arr))> 
    <cfset fooObj.foo(javacast("long[]", arr))>

fooClass クラスのメソッド fooMethod は、オーバーロードされた 1 つの引数を取ります。fooClass クラスは次のように定義されています。

public class fooClass { 
    public fooClass () { 
    } 
    public String fooMethod(String arg) { 
        return "Argument was a String"; 
    } 
    public String fooMethod(int arg) { 
        return "Argument was an Integer"; 
    }

}

ColdFusion では、次のコードを使用します。

<cfobject 
action="create" 
type = "java" 
class = "fooClass"  
name = obj> 
 
<!--- ColdFusion can treat this as a string or a real number ---> 
<cfset x = 33> 
 
Perform an explicit cast to an int and call fooMethod:<br> 
<cfset myInt = JavaCast("int", x)>  
<cfoutput>#obj.fooMethod(myInt)#</cfoutput> 
<br><br> 
Perform an explicit cast to a string and call fooMethod:<br> 
<cfset myString = javaCast("String", x)>  
<cfoutput>#obj.fooMethod(myString)#</cfoutput>