Sak*_*ket 48 java methods return-type
为什么没有(标准的,Java认证的)解决方案,作为Java语言本身的一部分,从Java方法返回多个值,而不是开发人员必须使用他们自己的方法,如地图,列表,对等.?为什么Java不支持n元组对象?
特别是考虑可以将两个对象一起修改(串联)的普通私有方法,并且在这种情况下作为返回的类型对象听起来有点过分.
Ada*_*ent 54
我假设OP意味着"为什么Java不支持n元组对象?".Python,Haskell,Lisp,ML等具有异构的n元组功能.通常,在语言中显然返回多个对象的能力也是语法糖(即在python中返回'a','b').
当然,原因是语言设计和一致性.Java更喜欢非常明确,不喜欢匿名数据结构(虽然我希望我们有匿名闭包).
例如在Java中,没有办法说我想要一个带有这些类型参数的回调并返回它.有些人认为这是一个巨大的弱点,其他人喜欢一致性和明确性.
恕我直言,虽然它很烦人我经常通过制作静态内联类来解决这个问题:
private static class Combo {
String name;
int weight;
}
Run Code Online (Sandbox Code Playgroud)
是的,它很乏味但后来我经常重用和重构那些使它们成为顶级并添加行为的类.实际上,采用这种方法的一个优点是,更容易添加新字段,即匿名数据结构(如FP语言),添加字段变得更加困难(最终会更改大量代码).
我应该注意,对于2元组,有些人使用(或滥用),java.util.Map.Entry因为java.util.AbstractMap.SimpleEntryJava 6中有一个.还有一些人现在使用Commons Lang3的Pair支持(2元组).
Scala有一些n-tuple支持作弊,并且拥有一大堆2-16个元组接口,这些接口是语言中的标准接口,并且在语法上对程序员隐藏起来.
出于纯粹的教育原因,您可能希望了解其他语言如何实现这一目标.
更新:适用于Java 8
Java 8将/可能(因此,我的号码......请给我打电话)支持一个叫做java.lang.BiValue具有你可以使用的具体实现的接口java.lang.BiVal.这些类有助于支持新的lambda功能.但请注意,这仅适用于2元组.
更新:2015年
Java的8并没有获得元组的支持.
更新:来自作者2015
如果你仍然想要元组支持,那么有三个库可以很好地支持元组:
Java方法返回零或一个值; 这是 java的标准.如果需要返回多个值,请创建具有多个值的对象并将其返回.
有很多黑客方法可以实现这一点,一种方法是返回一个Object[],但是你需要担心索引,并且空指针检查,它只会变得令人讨厌。另一种方法是返回 a String,但是你必须解析它,这会变得很糟糕。
我认为真正的问题是为什么?
问题是——如果我和你一起开发一个项目,并且我看到了这种类型的行为,我会重写它,这样你就可以看到应该如何处理它。如果您提供代码示例,我将重写它以进行说明。
编写具有单一职责的方法,如果它们需要返回比其能力更多的数据,您可能应该使用一个对象,或者将其分解为更小的方法。
| 归档时间: |
|
| 查看次数: |
62345 次 |
| 最近记录: |