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

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

特别是考虑一些可以同时修改两个对象(串联)的简单私有方法,在这种情况下,作为返回的类型化对象会听起来过度。

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

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

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

IMHO虽然它烦人,我经常打击这个问题,通过静态内联类:

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

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

我应该注意,对于2元组,有些人使用(或滥用)java.util.Map.Entry,因为在Java 6中有一个java.util.AbstractMap.SimpleEntry。有些人现在使用Commons Lang3’s Pair support (2-tuple)

Scala有n-tuple支持通过排序作弊和有一堆2-16元组接口是语言的标准,并从语法上隐藏的程序员。

纯粹教育的原因,你可能想看看如何其他languages accomplish this

更新:对于Java 8

Java 8将/也许(所以heres我的号码…叫我可能)支持一个接口java.lang.BiValue与一个具体的实现,你可以使用调用java.lang.BiVal。这些类是帮助支持新的lambda功能。但注意这只是为2元组。

更新:2015年

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

更新:从作者2015

如果你仍然想要tuple支持有三个库,支持元组很好:

> javatuples – 支持JDK 5及更高版本。高达10元组。
> JOOλ – 从jOOQ的作者,但需要JDK 8。
> Commons Lang 3 – 现在支持三元组(3元组),并支持JDK 6及更高版本。

转载注明原文:从Java方法返回多个值:为什么没有n元组对象? - 代码日志