我假设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元组接口是语言的标准,并从语法上隐藏的程序员。
更新:对于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及更高版本。