为什么没有(标准的,Java 认证的)解决方案作为 Java 语言本身的一部分,从 Java 方法返回多个值,而不是开发人员必须使用他们自己的方法,例如映射、列表、对等.?为什么 Java 不支持 n 元组对象?
特别是考虑可能一起(串联)修改两个对象的微不足道的私有方法,在这种情况下,类型化对象作为返回听起来有点过分。
原文由 Saket 发布,翻译遵循 CC BY-SA 4.0 许可协议
为什么没有(标准的,Java 认证的)解决方案作为 Java 语言本身的一部分,从 Java 方法返回多个值,而不是开发人员必须使用他们自己的方法,例如映射、列表、对等.?为什么 Java 不支持 n 元组对象?
特别是考虑可能一起(串联)修改两个对象的微不足道的私有方法,在这种情况下,类型化对象作为返回听起来有点过分。
原文由 Saket 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
我假设 OP 的意思是“为什么 Java 不支持 n 元组对象?”。 Python、Haskell、Lisp、ML 等具有异构的 n 元组功能。同样,在一种语言中明显返回多个对象的能力通常也是语法糖(即在 python 中返回’a’,’b’)。
原因当然是语言设计和一致性。 Java 更喜欢非常明确,不喜欢匿名数据结构(尽管我希望我们有匿名闭包)。
例如在 Java 中,没有办法说我想要一个接受这些类型参数并返回它的回调。有些人觉得这是一个巨大的弱点,其他人则喜欢一致性和明确性。
恕我直言,虽然这很烦人,但我经常通过制作静态内联类来解决这个问题:
是的,这很乏味,但后来我经常重用和重构那些使它们成为顶级并添加行为的类。事实上,走这条路的一个优点是,在匿名数据结构(如 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
如果您仍然想要元组支持,可以使用三个库来很好地支持元组: