场景
在实际工作当中,我们偶尔会碰到一个方法要返回1个以上返回值的情况,例如:一个方法要同时返回name=“kaka”,age=18。这该怎么解决呢?
解决方案
通常有以下几种解决方案:
- 将返回值放入List中,List作为方法的返回值返回
- 将返回值放入Object数组中,数组作为方法的返回值返回
- 将返回值放入Map中,Map作为方法的返回值返回
- 定义一个Class,返回值作为该Class的属性,该Class作为方法的返回值返回
可能大部分人都跳不出以上 4 种解决方案吧?其实还有另外一种方式,那就是采用 org.apache.commons.lang3.tuple(元组),通过将元祖作为返回值返回同样可以解决问题,代码如下:
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.ImmutableTriple;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.commons.lang3.tuple.Triple;
/**
* @Author: eric
* @Date: 2020/9/4 08:37
* @Description:
*/
public class Demo {
/**
* 二元组
*/
public static Pair<A, B> testPair() {
A a = new A();
B b = new B();
return new ImmutablePair<>(a, b);
}
/**
* 三元组
*/
public static Triple<A, B, C> testTriple() {
A a = new A();
B b = new B();
C c = new C();
return new ImmutableTriple<>(a, b, c);
}
public static void main(String[] args) {
Pair pair = testPair();
System.out.println("a : " + pair.getLeft());
System.out.println("b : " + pair.getRight());
System.out.println("//");
Triple triple = testTriple();
System.out.println("a : " + triple.getLeft());
System.out.println("b : " + triple.getMiddle());
System.out.println("c : " + triple.getRight());
}
}
输出结果:
a : com.cab5.tuple.A@2ff4acd0
b : com.cab5.tuple.B@54bedef2
//
a : com.cab5.tuple.A@8efb846
b : com.cab5.tuple.B@2a84aee7
c : com.cab5.tuple.C@a09ee92
啊哈,是不是还不错呢?以此类推是不是会有四元组、五元组 … N元组呢?哈哈哈,恐怕结果会让你失望,只有二元组和三元组。之所以这样,我的理解是完全没必要,如果真的要那么多返回值,还是老老实实的定一个 Class 吧~~