在开发的时候,总能碰到一个方法返回多个值的情形,除了将对象以入参的方式传到方法内部以外,还可以通过泛型构造元组来实现。
元组类实例
public class Tuple { public static void main(String[] args) { System.out.println(Tuple.create("asdf", 123)); } public static <A, B> TwoTuple<A, B> create(A a, B b) { return new TwoTuple<A, B>(a, b); } public static <A, B, C> ThreeTuple<A, B, C> create(A a, B b, C c) { return new ThreeTuple<A, B, C>(a, b, c); } public static <A, B, C, D> FourTuple<A, B, C, D> create(A a, B b, C c, D d) { return new FourTuple<A, B, C, D>(a, b, c, d); } private static class TwoTuple<A, B> extends Tuple{ public final A a; public final B b; public TwoTuple(A a, B b) { this.a = a; this.b = b; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("TwoTuple ["); if (a != null) builder.append("a=").append(a).append(", "); if (b != null) builder.append("b=").append(b); builder.append("]"); return builder.toString(); } } private static class ThreeTuple<A, B, C> extends TwoTuple<A, B> { public final C c; public ThreeTuple(A a, B b, C c) { super(a, b); this.c = c; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("ThreeTuple ["); if (a != null) builder.append("a=").append(a).append(", "); if (b != null) builder.append("b=").append(b); if (c != null) builder.append("c=").append(c).append(", "); builder.append("]"); return builder.toString(); } } private static class FourTuple<A, B, C, D> extends ThreeTuple<A, B, C> { public final D d; public FourTuple(A a, B b, C c, D d) { super(a, b, c); this.d = d; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("FourTuple ["); if (a != null) builder.append("a=").append(a).append(", "); if (b != null) builder.append("b=").append(b); if (c != null) builder.append("c=").append(c).append(", "); if (d != null) builder.append("d=").append(d).append(", "); builder.append("]"); return builder.toString(); } } }
使用方法
public class Test { public static void main(String[] args) { Tuple t = Tuple.create("123", 1); System.out.println(Tuple.create("asdf", 123)); } }