この投稿では、Javaのメソッドから複数の値を返す方法について説明します。

Java言語仕様に従って、Javaのメソッドは一度に1つの値しか返すことができません。したがって、メソッドから複数の値を返すことは、理論的にはJavaでは不可能です。しかし、Javaの優れている点は、いくつかの賢い回避策で望ましいことを実行できるという事実にあります。この投稿では、これを実現するために利用できるいくつかの選択肢の概要を説明します。

1.を使用して POJO クラスインスタンス

これは、Javaのメソッドから複数の値を返すために最も一般的に使用されるメソッドです。アイデアは、返したいすべてのフィールドを含むクラスのインスタンスを返すことです。

このクラスは、パブリックメンバー変数を持つPOJOと、必要な値でフィールドを開始するためのパブリックコンストラクターにすることができます JavaBean プライベートメンバー変数と引数なしのパブリックコンストラクターに対応するゲッターとセッターを使用します。

ダウンロード  コードを実行する

出力:

Name is Ryan
Age is 25
Gender is M

 
以下で説明する他の方法に比べてこの方法を使用する利点は、型の安全性を提供し、コードの読みやすさを大幅に向上させることです。

以下は、オブジェクトアレイを使用してすべての必須フィールドを格納する上記のプログラムのより単純なバージョンですが、型安全性を提供したり、フィールド情報を呼び出し元に渡したりすることはありません。

ダウンロード  コードを実行する

出力:

The returned values are [Ryan, 25, M, 100000]
The collection size is 4
The name field has value Ryan

 
また、汎用ペアまたは汎用タプルを実装することもできます。これにより、メソッドから2つまたは3つのフィールドを返す必要がある場合に、型の安全性も提供されます。

2.使用する javafx.util.Pair class

Java 8以降では、 Pair に含まれるクラス javafx.util 名前と値のペアを表すパッケージ。

コードをダウンロード

出力:

{name : Ryan}
{age : 25}
{gender : M}

3.特定のタイプのアレイまたはオブジェクトアレイを返します

これはこれまでで最も単純なアプローチですが、型安全性(オブジェクトアレイの場合)を提供したり、フィールド情報を呼び出し元に渡したりすることはありません。同じタイプの引数の場合、次のようなことができます。

ダウンロード  コードを実行する

出力:

[30, 50, 100]

 
マルチタイプの引数の場合、以下に示すように、オブジェクトのアレイを返すことができます。

ダウンロード  コードを実行する

出力:

[Ryan, 25, M, 100000]

4.コレクションを返却します

アレイを返す代わりに、 Collection。たとえば、次のプログラムは List アレイの代わりに。

ダウンロード  コードを実行する

出力:

[Ryan, 25, M, 100000]

 
を使って List フィールド情報を呼び出し元に渡しません。次に示すように、代わりにマップを作成して、フィールド名とその値をキーと値のペアとして渡すことができます。

ダウンロード  コードを実行する

出力:

income is 100000$
gender is Male
name is Ryan
age is 25

5.区切り文字を使用する

ここでの考え方は、区切り文字で区切られたすべての値で構成される文字列を返すことです。次に、呼び出し元メソッド内の値を使用する前に、同じ区切り文字を使用して文字列を分割する必要があります。

このアプローチはそれほど巧妙ではありませんが、モデルとビューの間でデータを転送するために多くのレガシープロジェクトで広く使用されています。

ダウンロード  コードを実行する

出力:

George
Martin

これで、Javaのメソッドから複数の値を返すことができます。

 
以下も参照してください。

Cの関数から複数の値を返す

C++の関数から複数の値を返します