Javaでの複数戻り値について解説!配列やクラスなど複数の型を返却
- システム
エンジニア - Javaの複数戻り値はどのように行えばよいのでしょうか。
- プロジェクト
マネージャー - 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
|
このように、クラスオブジェクトを返却し、そのオブジェクトのフィールドを呼び出すことで、複数の値を取り出せます。
- システム
エンジニア - 様々な方法を用いることで、複数の値を返すことができるのですね。
- プロジェクト
マネージャー - ぜひ自分でソースコードを書いてみてください。そうすると、理解も深まりますよ。
Javaのソースコードの理解を深めよう
Javaの関数で返却できる値は1つです。しかし、配列・List型・Map型・クラスオブジェクトを返却することで、複数の値を取り出せます。
ぜひご自身でJavaのソースコードを書いて、理解を深めてください。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
Java新着案件New Job
-
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅) -
販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅) -
生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅) -
社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅) -
金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅) -
大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)