gpt4 book ai didi

java - 在 Java 中返回多个值

转载 作者:搜寻专家 更新时间:2023-10-31 08:07:28 25 4
gpt4 key购买 nike

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

Preamble-2:我正在寻找“这在 Java 中不受支持......”之外的答案


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

有点像 PHP:

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

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

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

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

谢谢。

最佳答案

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

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');
}

但是没有被调用者构造 holder 实例。

每个返回值的数量都需要一个自己的元组类。 Functional Java library 中可能提供了类似的内容.作为引用,这里有一个 N-Tuple implementation .

对于二值情况,java.util.AbstractMap.SimpleEntry 会做:

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

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

  1. 类型化的返回值
  2. 指出每个返回值的含义

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

关于java - 在 Java 中返回多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10574526/

25 4 0
文章推荐: ios - 从 Fabric Crashlytics 迁移到 Firebase Crashlytics
文章推荐: javascript - javascript 如何从数组中只获取一个值
文章推荐: android - 从 Swift 访问 Kotlin 标准库
文章推荐: html - 点击后退按钮时如何将