Javaでの複数戻り値について解説!配列やクラスなど複数の型を返却

- SE
- Javaの複数戻り値はどのように行えばよいのでしょうか。
- PM
- Javaでは戻り値を1つしか返却できませんが、様々の方法を用いることで複数の戻り値を返すことができます。方法はこれから説明していきます。
この記事でわかること
Javaでの複数の戻り値について
今回は、Javaにおける複数戻り値の返却方法について説明します。Javaの関数は、戻り値を1つしか返却できません。
複数の戻り値を返却するには、いくつかの方法があります。Javaにおける複数戻り値の返却方法に興味のある方はぜひご覧ください。
1つの戻り値を分解する
戻り値を分解することで、複数の値を取り出せます。以下のサンプルコードは、”:”をデリミタとして複数の値を取り出しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
public class Main { // デリミタ static String del = ":"; public static String getValues() { String values = "str1" + del + "str2" + del + "str3"; return values; } public static void main(String[] args) throws Exception { // デリミタで分解 String[] values = getValues().split(del); // 値を取り出す for (String value: values){ System.out.println(value); } } } |
実行結果は以下のようになります。
1 2 3 |
str1 str2 str3 |
この場合、”:”を戻り値の一部としたい(デリミタとしたくない)場合の考慮が必要です。また、戻り値がString以外の型の場合も何かしらの考慮が必要で、あまりスマートではありません。
配列で返却
複数の戻り値が同じデータ型の場合、配列を返却することで複数の値を取り出せます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public class Main { public static int[] getValues() { int [] values = {10, 20, 30}; return values; } public static void main(String[] args) throws Exception { int [] values = getValues(); // 値を取り出す for (int value: values){ System.out.println(value); } } } |
実行結果は以下のようになります。
1 2 3 |
10 20 30 |
このように、複数の戻り値が同じデータ型の場合、配列を返却することで複数の値を取り出せます。
複数の戻り値が、異なるデータ型の場合でも、Objectクラスの配列を利用すればよいです。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public class Main { public static Object[] getValues() { String name = "Taro"; // 名前 int age = 30; // 年齢 char gender = 'M'; // 性別 Object [] values = {name, age, gender}; return values; } public static void main(String[] args) throws Exception { Object [] values = getValues(); // 値を取り出す for (Object value: values){ System.out.println(value); } } } |
実行結果は以下のようになります。
1 2 3 |
Taro 30 M |
このように、複数の戻り値が、異なるデータ型の場合でも、Objectクラスの配列を利用すれば、複数の値を取り出せます。
List型で返却
複数の戻り値が同じデータ型の場合、List型で返却することで複数の値を取り出せます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Main { public static List<Integer%gt; getValues() { List<Integer%gt; values = new ArrayList<>(); values.add(10); values.add(20); values.add(30); return values; } public static void main(String[] args) throws Exception { List<Integer%gt; values = getValues(); // 値を取り出す for (Iterator it = values.iterator(); it.hasNext();){ System.out.println(it.next()); } } } |
実行結果は以下のようになります。
1 2 3 |
10 20 30 |
このように、複数の戻り値が同じデータ型の場合、List型で返却することで複数の値を取り出せます。
先ほど述べた配列の場合と同じように、複数の戻り値が異なるデータ型の場合でも、ObjectクラスのListを利用すればよいです。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Main { public static List<Object> getValues() { List<Object> values = new ArrayList<>(); String name = "Taro"; // 名前 int age = 30; // 年齢 char gender = 'M'; // 性別 values.add(name); values.add(age); values.add(gender); return values; } public static void main(String[] args) throws Exception { List<Object> values = getValues(); // 値を取り出す for (Iterator it = values.iterator(); it.hasNext();){ System.out.println(it.next()); } } } |
実行結果は以下のようになります。
1 2 3 |
Taro 30 M |
このように、複数の戻り値が異なるデータ型の場合でも、ObjectクラスのListを利用すればよいです。
Map型で返却
JavaのMap型は2つの情報をキー(key)と値(value)のペアとして格納します。Objectクラスの値を格納したMapを返却することで、複数の値を取り出せます。
もちろん、値の型が決まっている場合は、Object型でなくても構いません。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
import java.util.Map; import java.util.HashMap; public class Main { public static Map<String, Object> getValues() { Map<String, Object> values = new HashMap<String, Object>(); String name = "Taro"; // 名前 int age = 30; // 年齢 char gender = 'M'; // 性別 values.put("name", name); values.put("age", age); values.put("gender", gender); return values; } public static void main(String[] args) throws Exception { Map<String, Object> values = getValues(); // 値を取り出す for (String key : values.keySet()){ System.out.println(key + " is " + values.get(key)); } } } |
実行結果は以下のようになります。
1 2 3 |
gender is M name is Taro age is 30 |
このように、Objectクラスの値を格納したMapを返却することで、複数の値を取り出せます。
同じような型として、Java8以降で使用できるjavafs.util.Pair型もあります。
クラスで返却
Javaのクラスオブジェクトを返却し、そのオブジェクトのフィールドを呼び出すことで、複数の値を取り出せます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
final class Person { public String name; // 名前 public int age; // 年齢 public char gender; // 性別 // コンストラクタ public Person(String name, int age, char gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static Person getValues() { String name = "Taro"; // 名前 int age = 30; // 年齢 char gender = 'M'; // 性別 // Personオブジェクトの生成 Person person = new Person(name, age, gender); return person; } public static void main(String[] args) throws Exception { Person person = getValues(); // 値を取り出す System.out.println("Name is " + person.name); System.out.println("Age is " + person.age); System.out.println("Gender is " + person.gender); } } |
実行結果は以下のようになります。
1 2 3 |
Name is Taro Age is 30 Gender is M |
このように、クラスオブジェクトを返却し、そのオブジェクトのフィールドを呼び出すことで、複数の値を取り出せます。
- SE
- 様々な方法を用いることで、複数の値を返すことができるのですね。
- PM
- ぜひ自分でソースコードを書いてみてください。そうすると、理解も深まりますよ。
Javaのソースコードの理解を深めよう
Javaの関数で返却できる値は1つです。しかし、配列・List型・Map型・クラスオブジェクトを返却することで、複数の値を取り出せます。
ぜひご自身でJavaのソースコードを書いて、理解を深めてください。