在Java中返回多个值

序言:我知道使用列表或其他集合来返回结果但是我必须通过列表来获取结果:参见第2个示例

序言-2:我正在寻找一个超出“Java不支持……”的答案.

我正在寻找一种从Java方法调用返回多个对象的便捷方法.

有点像PHP:

list ($obj1, $obj2, ...) foobar();

我真的厌倦了在参数中传递持有者对象,例如:

class Holder {
   int value;
}

Holder h1=new Holder();
Holder h2=new Holder();

接着:

o.foobar(h1,h2);

如果有人想出一个优雅的方法来解决这个问题,那将会非常感兴趣.

使用列表

List<String> = foobar();

这有两个缺点:

我必须先在房子的被叫方一侧打包清单:

// this is on the callee side of the house
ArrayList<String> result = new ArrayList<String>
result.add("foo");
result.add("bar");

然后在呼叫者方面,我必须得出结果:

// This is on the caller side
List<String> result = foobar();
String result1 = result.get(0);
String result2 = result.get(1); // this is not as elegant as the PHP equivalent

此外,假设我想返回不同类型的对象,比如String,Integer我将不得不返回一个对象列表,然后转换每个对象…不漂亮

谢谢.

使用通用元组类是我能想象到的最接近的类.为了给出一个想法,这样的三个返回值的通用类可能看起来像这样:

public class T3<A, B, C> {
    A _1;
    B _2;
    C _3;
    T3(A _1, B _2, C _3) {
        this._1 = _1;
        this._2 = _2;
        this._3 = _3;
    }
}

这允许被调用者端的一个语句构造函数,例如:

public T3<String, Integer, Character> getValues() {
    return new T3<String, Integer, Character>("string", 0, 'c');
}

但是没有被调用者的持有者实例构造.

每个返回值都需要一个自己的元组类. Functional Java library中可能会提供类似的内容.作为参考,这里是N-Tuple implementation.

对于两值的情况,java.util.AbstractMap.SimpleEntry会这样做:

return new SimpleEntry<String, Integer>("string", 0);

无论如何,我认为多个返回值需要考虑两个要点:

>键入的返回值
>指出每个返回值的含义

虽然很无聊,但我建议创建一个单独的类来保存所有响应值,并将其声明为方法返回类型.这样就可以突出显示每个值的含义.

https://stackoverflow.com/questions/10574526/returning-multiple-values-in-java

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:在Java中返回多个值