Main Content

Java メソッドから返されるデータの処理

Java® メソッドからプリミティブ型のデータが返される場合、MATLAB®プリミティブ型の戻り値の表に示されるようにデータを変換します。

Java メソッド シグネチャで、戻り値のデータ型が java.lang.Object と指定されている場合、MATLAB はjava.lang.Object 型の戻り値の表に示されるように、実際に返された型を変換します。

MATLAB は他の Java オブジェクトを MATLAB 型に変換しません。このデータの処理の詳細については、Java オブジェクトを MATLAB 型に変換する関数を参照してください。

プリミティブ型の戻り値

MATLAB は Java メソッドから返されたプリミティブ型データを MATLAB 言語に対してデータを最も適切に表す型に変換します。以下の表は、MATLAB がデータを変換する方法を示します。いくつかの Java 型では、MATLAB はスカラーの戻り値および配列の戻り値を異なる方法で処理します。

Java の戻り値の型結果の MATLAB の型 — スカラー結果の MATLAB の型 — 配列

boolean

logical

logical

byte

double

int8

short

double

int16

int

double

int32

long

double

int64

float

double

single

double

double

double

char

char

char

java.lang.String メソッド toCharArray のシグネチャは次のとおりです。

public char[] toCharArray()

String オブジェクトでメソッドを呼び出します。MATLAB は出力を char 配列に変換します。

str = java.lang.String('hello');
res = str.toCharArray'
res =

  1×5 char array

hello

java.lang.Object 型の戻り値

Java メソッドが java.lang.Object 型のデータを返すと宣言されている場合、MATLAB は実際に返される型に応じて値を変換します。以下の表は、MATLAB がデータを変換する方法を示します。

実際の Java の型:結果の MATLAB の型 — スカラー

java.lang.Boolean

logical

java.lang.Byte

double

java.lang.Short

double

java.lang.Integer

double

java.lang.Long

double

java.lang.Float

double

java.lang.Double

double

java.lang.Character

char

java.lang.String

char

戻り引数が Object のサブクラスまたは Object の配列の場合、変換は行われません。オブジェクトは Java オブジェクトのままです。ただし、返された Object 配列をインデックス処理する場合、MATLAB は表に従って値を変換します。詳細については、オブジェクトの配列要素の MATLAB 型への変換を参照してください。

getData メソッドの以下のシグネチャを参照します。

java.lang.Object getData()

getDatajava.lang.Integer オブジェクトを返す場合、MATLAB は値を double に変換します。

Java オブジェクトを MATLAB 型に変換する関数

MATLAB は、メソッドのシグネチャが java.lang.Object を指定する場合にのみオブジェクト データの戻り値を変換します。シグネチャが他のオブジェクト型を指定する場合、MATLAB は値を変換しません。たとえば、MATLAB は以下のメソッドのシグネチャの戻り値は変換します。

java.lang.Object getData()

しかし、MATLAB は以下のメソッドの戻り値は変換しません。

java.lang.String getData()

Java オブジェクト データを MATLAB データに変換するには、以下のトピックで説明されているように MATLAB 関数を使用します。

MATLAB 数値型への変換

Java 数値型を MATLAB 型に変換するには、double などの数値に関する MATLAB 関数を使用します。関数 double による動作は、指定するオブジェクトのクラスによって異なります。

  • オブジェクトが java.lang.Number から派生するクラスのインスタンスの場合、MATLAB はオブジェクトを MATLAB double に変換します。

  • オブジェクトが数値クラスのインスタンスではない場合、MATLAB はクラス定義に toDouble メソッドがあるかどうかを確認します。MATLAB はこのメソッドを呼び出して変換を実行します。

  • 独自のクラスを作成する場合、toDouble メソッドを記述して独自の型変換を指定します。

メモ

オブジェクトのクラスが java.lang.Number から派生しておらず、toDouble メソッドを実装していない場合、関数 double はエラー メッセージを表示します。

MATLAB string への変換

java.lang.String オブジェクトおよび配列を MATLAB の string または文字ベクトルに変換するには、MATLAB 関数 string または char を使用します。

MATLAB 関数で指定されたオブジェクトが java.lang.String クラスのインスタンスでない場合、MATLAB はそのクラス定義に toString メソッドまたは toChar メソッドがあるかどうかを確認します。独自のクラスを作成する場合、toString メソッドまたは toChar メソッドを記述して文字列の変換を指定します。

メモ

オブジェクトのクラスが java.lang.String ではなく、toChar メソッドを実装していない場合、関数 char はエラー メッセージを表示します。

MATLAB 構造体への変換

Java クラスがフィールド名を定義する場合、関数 struct を使用してオブジェクト データを MATLAB 構造体に変換します。

java.awt.Polygon オブジェクトを返す Java メソッドを呼び出すとします。クラスは xpoints フィールドと ypoints フィールドを定義します。この例を実行するために、polygon 変数を作成します。

polygon = java.awt.Polygon([14 42 98 124],[55 12 -2 62],4);

オブジェクトを構造体に変換し、3 番目の点の x,y 座標を表示します。

pstruct = struct(polygon)
pstruct = 

  struct with fields:

    npoints: 4
    xpoints: [4×1 int32]
    ypoints: [4×1 int32]

MATLAB cell 配列への変換

Java メソッドから異なる型のデータが返される場合、関数 cell を使用してデータを MATLAB 型に変換します。結果の cell 配列の要素は、プリミティブ型の戻り値およびjava.lang.Object 型の戻り値の各表に従って変換されます。

java.lang.Doublejava.awt.Point および java.lang.String 型の引数を返す Java メソッドを呼び出すとします。この例を実行するために、これらの型の変数を作成します。

import java.lang.* java.awt.*

% Create a Java array of double
dblArray = javaArray('java.lang.Double',1,10);
for m = 1:10
   dblArray(1,m) = Double(m * 7);
end

% Create a Java array of points
ptArray = javaArray('java.awt.Point',3);
ptArray(1) = Point(7.1,22);
ptArray(2) = Point(5.2,35);
ptArray(3) = Point(3.1,49);

% Create a Java array of strings
strArray = javaArray('java.lang.String',2,2);
strArray(1,1) = String('one');
strArray(1,2) = String('two');
strArray(2,1) = String('three');  
strArray(2,2) = String('four');

各配列を cell 配列に変換します。MATLAB 関数で cellArray を使用できます。

cellArray = {cell(dblArray),cell(ptArray),cell(strArray)}
cellArray =

  1×3 cell array

    {1×10 cell}    {3×1 cell}    {2×2 cell}

各セルに異なる型の配列が含まれています。内容を表示します。

cellArray{1,1}       % Array of type double
ans =

  1×10 cell array

    [7]    [14]    [21]    [28]    [35]    [42]    [49]    [56]    [63]    [70]
cellArray{1,2}       % Array of type Java.awt.Point
ans =

  3×1 cell array

    [1×1 java.awt.Point]
    [1×1 java.awt.Point]
    [1×1 java.awt.Point]
cellArray{1,3}       % Array of type char array
ans =

  2×2 cell array

    'one'      'two' 
    'three'    'four'

関連するトピック