Wolfram ResearchPRODUCTSPURCHASEFOR USERSCOMPANYOUR SITES
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.

Documentation / Mathematica / アドオンとリンク / J/Link / 第1部 インストール可能なJava:MathematicaからJavaを呼び出す /

1.1.4 JavaとMathematica 間での型の変換

Javaオブジェクトを作成し,メソッドを呼び出す操作に入る前に,Mathematica とJava間の型のマッピングを調べなければなりません.Javaメソッドが結果をMathematica に返すとき,その結果は自動的にMathematica の式に変換されます.例えば,Javaの整数型(例えば,byte,short,intなど)はMathematica の整数に変換され,Javaの実数型(floatやdouble)はMathematica の実数に変換されます.下の表は完全な変換表です.この変換はどちらの方向にも当てはまります.例えば,Mathematica 整数がbyte値を要求するJavaメソッドに送られると,その整数は自動的にJavaのbyteに変換されます.

JavaとMathematicaの対応する型

Javaの配列は適切な深さのMathematica リストにマップされます.従って,double[]を取るメソッドを呼び出すとき,それに{1.?0, 2.0, N[Pi], 1.23}を渡すかもしれません.同様に,深さ2の整数配列を返すメソッド (つまり, int[][]) は,Mathematica に式{{1, 2, 3}, {5, 3, 1}}を返すかもしれません.

ほとんどの場合J/Link を使うと,実数型(floatあるいはdouble)メソッドに,Mathematica 整数を与えることができます.同様にdouble[] 引数としてもつメソッドには整数と実数が混ざったリストを渡すことができます.これができないのはまれで,メソッドが同じ引数のスロットで実数,整数のタイプのみが違う2つのシグネチャをっている場合です.例えば,以下のようなメソッドをもつクラスを考えてみてください.

public void foo(byte b, Object obj);

public void foo(float f, Object obj);

public void bar(float f, Object obj);

J/Link はメソッドfooについて2つのMathematica 定義を作成します.ひとつは最初の引数に整数を取り,最初のシグネチャを呼び出し,もうひとつは最初の引数に実数を取り,2つ目のシグネチャを呼び出すものです.barメソッドについて作られた定義は最初の引数に整数,実数のどちらでも受け入れます.つまり,あるメソッドについてどちらのシグネチャを呼び出すかが曖昧になってしまう場合以外は,J/Link は自動的に整数を実数に変換するのです.しかし,これは必ず行われる訳ではありません.というのは,J/Link は実数と整数の曖昧さがすべての引数の位置で問題になるかどうかを決定するために,全力を尽くすわけではないからです.1つの位置で曖昧であると,J/Link はあきらめて,すべての引数位置で正確な型のマッチングを要求します.少し混乱されるかもしれませんが,ほとんどの場合,J/Link を使うと整数あるいは整数のリストを,それぞれ実数あるいは実数の配列を引数としてもつメソッドに渡すことができます.それができない場合は,エラーメッセージが現れ,呼出しは失敗に終ります.このような場合は,明示的にすべての整数を実数に変換するため,Mathematica のN関数を使わなければならないでしょう.



Any questions about topics on this page? Click here to get an individual response.Buy NowMore Information


 © 2008 Wolfram Research, Inc.  Terms of Use  Privacy Policy |
Sign up for our newsletter: