从 Java 方法返回多个值:为什么没有 n 元组对象?

新手上路,请多包涵

为什么没有(标准的,Java 认证的)解决方案作为 Java 语言本身的一部分,从 Java 方法返回多个值,而不是开发人员必须使用他们自己的方法,例如映射、列表、对等.?为什么 Java 不支持 n 元组对象?

特别是考虑可能一起(串联)修改两个对象的微不足道的私有方法,在这种情况下,类型化对象作为返回听起来有点过分。

原文由 Saket 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

我假设 OP 的意思是“为什么 Java 不支持 n 元组对象?”。 Python、Haskell、Lisp、ML 等具有异构的 n 元组功能。同样,在一种语言中明显返回多个对象的能力通常也是语法糖(即在 python 中返回’a’,’b’)。

原因当然是语言设计和一致性。 Java 更喜欢非常明确,不喜欢匿名数据结构(尽管我希望我们有匿名闭包)。

例如在 Java 中,没有办法说我想要一个接受这些类型参数并返回它的回调。有些人觉得这是一个巨大的弱点,其他人则喜欢一致性和明确性。

恕我直言,虽然这很烦人,但我经常通过制作静态内联类来解决这个问题:

 private static class Combo {
   String name;
   int weight;
}

是的,这很乏味,但后来我经常重用和重构那些使它们成为顶级并添加行为的类。事实上,走这条路的一个优点是,在匿名数据结构(如 FP 语言)中添加新字段要容易得多,添加字段变得更加困难(你最终会更改大量代码)。

我应该注意,对于二元组,有些人使用(或滥用) java.util.Map.Entry 因为在 Java 6 中有一个 java.util.AbstractMap.SimpleEntry 。还有一些人现在使用 Commons Lang3 的对支持(二元组)

Scala 通过某种欺骗方式支持 n 元组,并拥有一大堆 2-16 元组接口,这些接口是该语言的标准,并且在语法上对程序员隐藏。

出于纯粹的教育原因,您可能想看看其他 语言是如何做到这一点 的。

更新:对于 Java 8

Java 8 将/也许(所以这是我的电话号码……也许可以打电话给我)支持一个名为 java.lang.BiValue 的接口,以及一个你可以使用的具体实现,称为 java.lang.BiVal 。这些类有助于支持新的 lambda 功能。但请注意,这仅适用于二元组。

更新:2015 年

Java 8 没有 获得对元组的支持。

更新:来自作者 2015

如果您仍然想要元组支持,可以使用三个库来很好地支持元组:

  • javatuples - 支持 JDK 5 及更高版本。最多 10 元组。
  • JOOλ - 来自 jOOQ 的作者,但需要 JDK 8.
  • Commons Lang 3 - 现在支持三元组(三元组)并支持 JDK 6 及更高版本。

原文由 Adam Gent 发布,翻译遵循 CC BY-SA 3.0 许可协议

Java 方法恰好返回零或一个值;那 java的标准。如果您需要返回多个值,请创建一个包含多个值的对象并返回它。

原文由 DwB 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题