Main Content

Java メソッドへのデータの受け渡し

MATLAB 型の Java 型へのマッピング

MATLAB® データを引数として Java® メソッドに渡すとき、MATLAB はそのデータを Java 言語に対してデータを最も適切に表す型に変換します。データを java.lang 型の引数に渡すときの型のマッピングの詳細については、Java オブジェクトの受け渡しを参照してください。

以下の表の各行は MATLAB の型の後に、一致する可能性のある Java 引数を、一致度の高い順に左から右に示します。MATLAB の型 (cell 配列を除く) はスカラー (1 行 1 列) 配列または行列です。Java の型は、スカラー値または配列です。

MATLAB 引数

Java パラメーターの型 (スカラーまたは配列)
オブジェクト以外の型

最も一致度の高い型 <———————————————————————> 最も一致度の低い型

logical

boolean

byte

short

int

long

float

double

double

double

float

long

int

short

byte

boolean

single

float

double

     

uint8
int8

byte

short

int

long

float

double

 

uint16
int16

short

int

long

float

double

  

uint32
int32

int

long

float

double

   

uint64
int64

long

float

double

    

string スカラー、
文字ベクトル、
char スカラー

String

      

string 配列、
文字ベクトルの cell 配列
文字列引数の受け渡しを参照してください。

String[]

      

jClass 型の Java オブジェクト

jClass 型の JavaObject

jClass の任意のスーパークラス

     

オブジェクトの cell 配列

Object[]

      

MATLAB オブジェクト

対応なし

      

変換に対する配列次元の影響

"次元" とは、配列の要素をアドレス指定するために必要な添字の数を意味します。たとえば、5 行 1 列の配列の場合、1 つの配列添字で個々の要素にインデックス付けするため、1 次元です。

MATLAB 配列を Java 配列に変換する際、MATLAB は次元を特別な方法で処理します。MATLAB 配列では、次元は配列内の、大きさが 1 でない次元の数です。たとえば、10 行 1 列の配列は 1 次元です。一方、1 行 1 列の配列は 0 次元です。これは、スカラー値にはインデックス付けできないためです。Java コードでは、入れ子にされた配列の数によって次元が決まります。たとえば、double[][] は 2 次元で、double は 0 次元です。

Java 配列の次元数が MATLAB 配列 n の次元数と一致する場合、変換された Java 配列は n 次元となります。Java 配列の次元数が n より少ない場合、変換時に、大きさが 1 の次元が最初のものから削除されます。残りの次元数が Java 配列の次元数と一致すると、変換が停止します。Java 配列の次元数が n より多い場合、MATLAB は大きさが 1 の次元を後に追加します。

数値の整数引数への変換

Java の整数パラメーターをとる Java メソッドに整数型を渡す場合、MATLAB による変換は、Java による整数型の変換と同じです。特に、整数が範囲外である場合、パラメーター型のビット数に収まりません。範囲外の整数の場合、MATLAB は最下位の n ビットをすべて破棄します。値 n はパラメーター型のビット数です。MATLAB の整数型間の変換では、範囲外の整数は変換先の型で表現される最大値または最小値に変換されますが、この変換はそれとは異なっています。

引数が浮動小数点数の場合、MATLAB は Java と同じ方法でそれを整数に変換しません。MATLAB はまず浮動小数点数を、非整数部分を切り捨てた 64 ビットの符号付き整数に変換します。その後、その数は int64 引数のように処理されます。

-263 ~ -263 の範囲外の場合、浮動小数点数が大きすぎるために 64 ビットの整数で表すことができません。この場合、MATLAB は以下の変換を使用します。

  • intshortbyte の各パラメーター値を 0 に。

  • long パラメーター値を java.lang.Long.MIN_VALUE に。

  • Inf-Inf の値を -1 に。

  • NaN 値を 0 に。

文字列引数の受け渡し

java.lang.String として定義された引数をもつ Java メソッドを呼び出すには、MATLAB string または文字ベクトルを渡します。MATLAB は引数を Java String オブジェクトに変換します。Java メソッドで返された String オブジェクトを渡すこともできます。

メソッドの引数が String 型の配列の場合、string 配列または文字ベクトルの cell 配列を渡します。MATLAB は、変換に対する配列次元の影響で説明されているように次元を調整して、入力を String オブジェクトの Java 配列に変換します。

Java オブジェクトの受け渡し

java.lang.Object 以外の Java クラスに属する引数をもつメソッドを呼び出すには、そのクラスのインスタンスである Java オブジェクトを渡さなければなりません。MATLAB は Java のオートボクシングをサポートせず、MATLAB の型を Java Object 型に自動変換しません。たとえば、MATLAB は Double 型のパラメーターについて、doublejava.lang.Double に変換しません。

java.lang.Object の受け渡し

メソッドが java.lang.Object クラスの引数を取る特殊なケースがあります。このクラスは Java クラス階層のルートであるため、引数で任意のクラスのオブジェクトを渡すことができます。MATLAB は引数を最も近い Java Object 型に自動変換します。これには、Java スタイルのオートボクシングが含まれることもあります。以下の表は変換を示しています。

MATLAB 引数

パッケージ java.lang の Java Object

logical

Boolean

double

Double

single

Float

char スカラー

Character

string スカラー
空でない char ベクトル

String

uint8
int8

Byte

uint16
int16

Short

uint32
int32

Integer

uint64
int64

Long

string 配列 (非スカラー)
文字ベクトルの cell 配列

String[]

Java オブジェクト

引数に変更なし

cell 配列

Object[]

MATLAB オブジェクト

対応なし

オブジェクトの配列の受け渡し

java.lang.Object または java.lang.Object の配列として定義された引数をもつメソッドを呼び出すには、Java 配列または MATLAB cell 配列を渡します。MATLAB は、java.lang.Object の受け渡しの表に示すように、cell 配列要素をそれらの Java 型に自動変換します。Java 配列は、Java コンストラクターから返される配列です。MATLAB で関数 javaArray を使用して Java 配列を作成することもできます。

Java オブジェクトの cell 配列の受け渡し

Java オブジェクトの cell 配列を作成するには、MATLAB 構文 {a1,a2,...} を使用します。構文 a{m,n,...} を使用して、通常の方法で Java オブジェクトの cell 配列にインデックス付けをします。たとえば、cell 配列 A を作成します。

a1 = java.lang.Double(100);
a2 = java.lang.Float(200);
A = {a1,a2}
A =

  1×2 cell array

    [1×1 java.lang.Double]    [1×1 java.lang.Float]

空行列、null 値、および欠損値の受け渡し

MATLAB は空行列を次のように変換します。

  • 引数が空の文字ベクトルで、パラメーターが String として宣言されている場合は、MATLAB は (null ではなく) 空の Java String オブジェクトを渡します。

  • それ以外の場合はすべて、MATLAB は空の配列を Java null に変換します。

空 (長さが 0) の Java 配列は変わりません。

MATLAB は string の <missing> 値を null に変換します。

オーバーロード メソッド

Java オブジェクトでオーバーロード メソッドを呼び出す場合、MATLAB は、渡された引数を、メソッドに対して定義された引数と比較します。この場合の "メソッド" には、コンストラクターも含まれます。MATLAB は呼び出すメソッドを判別し、Java 変換規則に従って引数を Java 型に変換します。詳細については、オブジェクトの配列の受け渡しを参照してください。

Java メソッドを呼び出すと、MATLAB は次を確認します。

  1. オブジェクト (静的メソッドの場合はクラス) がその名前のメソッドをもつこと。

  2. 呼び出しによって、その名前をもつ少なくとも 1 つのメソッドと同じ数の引数が渡されること。

  3. 渡された各引数が、そのメソッドに対して定義されている Java 型に変換されること。

これらの条件がすべて満たされると、MATLAB はメソッドを呼び出します。

オーバーロード メソッドの呼び出しでは、候補が複数ある場合、MATLAB は呼び出し引数に最も適合する引数をもつメソッドを選択します。MATLAB は、まず、渡された引数と互換性のない引数の型をもつメソッドを拒否します。たとえば、メソッドが double 引数をもつ場合、char 引数は互換性がありません。

次に、MATLAB は最高の適合度値 (すべての引数の適合度値の合計) をもつメソッドを選択します。各引数の適合度値は、基本データ型の適合度から MATLAB 配列次元と Java 配列次元の差を引いたものです 配列の次元の詳細については、変換に対する配列次元の影響を参照してください。2 つのメソッドが同じ適合度である場合、Java クラスで最初に定義された方が選択されます。

関連するトピック