外部インタフェース/API    

データをオーバロードメソッドに渡す

Javaオブジェクトに対してオーバロードメソッドを呼び出すとき、MATLABは、ユーザ呼び出しが渡す引数とメソッドに対して定義された引数を比較することによって、呼び出すメソッドを決定します。この説明では、メソッドはコンストラクタを含みます。呼び出すメソッドを決定するとき、MATLABはオブジェクト配列またはセル配列に関する変換以外について、Javaの変換規則に従って呼び出し引数をJavaメソッドタイプに変換します。「配列にオブジェクトを渡す」を参照してください。

呼び出すメソッドを決定する方法

  1. オブジェクト(またはスタティックメソッドに対してはクラス)がその名前のメソッドをもつことを確認します。
  2. 呼び出しが、少なくとも1つのその名前のメソッドの引数と同数の引数を渡すかどうかを決定します。
  3. 渡される各引数が、メソッドに対して定義されたJavaタイプに変換されることを確認します。

上記の全ての条件が満たされる場合は、MATLABはメソッドを呼び出します。

オーバーロードされたメソッドの呼び出しにおいて、2つ以上の候補がある場合は、MATLABは呼び出し引数にもっとも合う引数を持つものを選択します。最初に、MATLABは、渡される引数と互換性のない引数をもつメソッドを除外します(たとえば、メソッドがdoubleの引数を持ち、渡される引数がcharである場合)。

残りのメソッドの中で、MATLABは、すべての引数の適合度の値の総和である、最高の適合度を持つものを選択します。各引数に対する適合度の値は、ベースタイプの適合度からMATLAB配列の次元とJava配列の次元との差分を引いたものです(配列の次元は、「配列の次元の変換への影響」で説明します)。2つのメソッドが同じ適合度値をもつ場合は、javaクラスで最初に定義されたメソッドが選択されます。

例題 - オーバーロードされたメソッドの呼び出し

関数がjava.io.OutputStreamWriterオブジェクトoswを作成し、オブジェクトについてメソッドを呼び出すと仮定します。

MATLABは、クラスjava.io.OutputStreamWriterが3つのwriteメソッドを定義することを見つけます

最初のwriteメソッドは引数を1つだけを受け取るので、MATLABはそれを拒否します。その後、MATLABは残りの2つのwriteメソッドの適合度を評価します。これらは、以下で説明する第一引数のみが異なります。

これらの2つのうちの最初のwriteメソッドにおいて、第一引数は、ベースタイプcharによって定義されます。表「MATLABタイプからJavaタイプへの変換」は、呼び出し引数のタイプ(MATLABのchar)に対して、Javaタイプcharは値6を持つことを示します。呼び出し引数とJava引数の次元の違いはありません。そのため、第一引数の適合度値は6です。

他のwriteメソッドにおいて、第一引数はJavaタイプのStringで、適合度値は7です。Java引数の次元は0なので、Java引数と呼び出し引数との次元の差は1です。そのため、第一引数に対する適合度値は6です。

これらの2つのwriteメソッドに対する適合度値は等しいので、MATLABは(char[]第一引数を持つ)クラス定義で最初にリストされたメソッドを呼び出します。


 その他のデータ変換のトピックス Javaメソッドから出力されるデータの扱い