Javaで戻り値を多値で返したい

エキサイト株式会社メディア開発の佐々木です。

Javaは、戻り値を1つしか返せない言語です。GoやPythonは複数返すことができますが、言語的にサポートされていないので、ライブラリを使って代用します。

設定

使うライブラリは、有名なcommons-lang3になります。Gradleで依存解決を行います。

dependencies {
    ...
    implements "org.apache.commons:commons-lang3:3.10"   // 追加
    ...
}

戻り値2つ

戻り値2つには、Pairをしようします。

public Pair<Integer, String> getPair(){
      Integer id = 1;
      String name = "hogehoge";
      return Pair.of(id,name);
}

// 使用側
Pair<Integer, String> pair = getPair();
pair.getLeft();   // 左側取り出し
pair.getRight();  // 右側取り出し

Pair.of(L,R) を使用して、Pairオブジェクトを作り、返却します。利用する方は、左にセットされた値と右にセットされた値をそれぞれ取り出すメソッドが実装されているので、すぐに取り出せます。

戻り値3つ

戻り値3つには、Triple を使用します。

public Triple<Integer, Boolean, String> getTriple(){
      Integer id = 1;
      Boolean isActive = true;
      String name = "hogehoge";
      return Triple.of(id,isActive,name);
}

// 使用側
Triple<Integer, Boolean, String> triple = getTriple();
triple.getLeft();  //左側取り出し
triple.getMiddle(); //真ん中取り出し
triple.getRight(); //右側取り出し

Triple.of<L,M,R>を使用して、Tripleオブジェクトを作り、返却します。利用する方は、それぞれの値を取り出すようのメソッドが実装されているので、すぐに取り出せます。

さいごに

Pairは、Map.Entryを拡張していて、Tripleは、独自実装をしています。(PairはgetKey(), getValue()のメソッドがあります)GolangやPythonのように、変数に一気入れられませんが、事は足りますので必要に迫られれば使っていきたいと思います。

エキサイト株式会社では、長期インターン等を募集しております。まだHP等ができていませんが、wantedlyから連絡いただければ対応させていただきたいと思います。

www.wantedly.com