为什么没有一种(标准的,Java认证的)解决方案作为Java语言本身的一部分,可以从Java方法返回多个值,而不是开发人员必须使用自己的方法(例如Maps,Lists, 配对等? 为什么Java不支持n元组对象?
特别考虑琐碎的私有方法,这些方法可以一起修改两个对象(一前一后),在这种情况下,作为返回的类型化对象听起来过于杀伤。
最新回答
- 2021-1-121 #
- 2021-1-122 #
如果要返回两个对象,通常需要返回一个封装了两个对象的单个对象。
- 2021-1-123 #
p>
- 2021-1-124 #
有很多方法可以做到这一点,一种方法是归还
Object[]
,但是您就需要担心索引了,而对空指针进行检查时,它变得很讨厌.另一种方法是返回String
,但是您必须对其进行解析,然后它变得很讨厌.I think the real question is why?
这很麻烦-如果我正在与您一起进行项目,并且看到了这种类型的行为,我将对其进行重写,以便您可以看到应该如何处理.如果您提供代码示例,我将对其进行重写以进行说明。
用一种责任来编写您的方法,如果它们需要返回的数据超出其能力,则您可能应该使用一个对象,或将其分解为较小的方法。
- 2021-1-125 #
因为返回 不推荐使用方法中的多值(在Java中).
如果需要方法中不相关的值,则需要其他数据结构,例如包含这些值的对象.如果需要同一个类的多个实例(即几个String),则需要根据需要返回一个数组或某个集合.
例如,使用其他语言返回多个值(例如Go)来返回错误代码,但是Java在设计上使用异常进行了不同的设计.
相关问题
- reflection:如何拦截具有标准Java功能(无AspectJ等)的方法调用?javareflectionmethods2021-01-12 01:28
- java:如何在另一种方法中使用一种方法的变量?javamethodsmultidimensionalarray2021-01-11 05:54
我认为OP的意思是"为什么 Java不支持n元组对象?"。 Python,Haskell,Lisp,ML等具有异构n元组功能.通常,在某种语言中显然可以返回多个对象的能力是语法上的糖(例如,在python中,返回'a','b')。
当然的原因是语言设计和一致性. Java倾向于非常明确,不类似匿名数据结构(尽管我希望我们拥有匿名闭包)。
例如,在Java中,没有办法说我想要一个接受这些类型参数并返回此参数的回调.有些人觉得这是一个巨大的弱点,其他人则类似一致性和明确性。
恕我直言,尽管很烦人,但我经常通过制作静态内联类来解决这个问题:
是的,它很乏味,但是后来我经常重用和重构那些类,使它们成为顶级并增加行为.实际上,采用这种方法的优点之一是,在匿名数据结构(如FP语言)中添加新字段要容易得多,添加字段就变得困难得多(最终需要更改大量代码).
我应该注意,某些人使用2元组使用(或滥用)
java.util.Map.Entry
因为有一个java.util.AbstractMap.SimpleEntry
Java 6中也是如此。现在,有些人还使用Commons Lang3的Pair支持(2元组)。Scala通过作弊而具有n元组支持,并具有一大堆2-16元组接口,这是该语言的标准配置,并且在语法上对程序员而言是隐藏的.
出于纯粹的教育原因,您可能希望了解其他语言如何做到这一点。
UPDATE: for Java 8
Java 8将(也许在这里,我的电话号码……也许叫我)支持称为
java.lang.BiValue
的接口 可以使用称为java.lang.BiVal
的具体实现 .这些类是为了帮助支持新的lambda功能.但是请注意,这仅适用于2元组。UPDATE: for 2015
Java 8并没有获得对元组的支持。
UPDATE: from author 2015
如果您仍然想要元组支持,那么有三个库很好地支持元组:
javatuples - Supports JDK 5 and above. Up to 10-tuple.
JOOλ - From the author of jOOQ but requires JDK 8.
Commons Lang 3 - Now supports a Triple (3-tuple) and supports JDK 6 and above.
Java方法恰好返回零或一个值; 那 is Java的标准.如果需要返回多个值,请创建具有多个值的对象并将其返回。