鉴于方法:
private Object[] method(){
//run some codes
return new Object[]{Obj1, Obj2};
}
请注意,2次不同的运行将提供唯一的输出,因此以下内容将不正确
Object obj1run1 = method()[0], obj2run1 = method()[1];
//Because the method will be run 2 times with 2 unique results;
我知道我可以通过以下方式解决我的问题:
Object hold[] = method();
obj1run1 = hold[0];
obj2run1 = hold[1];
但我正在寻找一种简单快捷的编写代码的方法,比如说:
(obj1run1, obj2run1) = method();
//saw this somewhere but doesnt work on Java
所以我的问题(使用上面的例子):如何在尽可能少的代码行中将数组的内容分配到多个变量中?
答案 0 :(得分:1)
(obj1run1, obj2run1) = method();
此语法通常称为读取元组,可用于其他几种语言(Swift,最新的C#等)but not in Java。
虽然你的解决方案工作正常,但你可能最好创建一个特殊的类来返回你的特定元组。由于您返回的两个对象以某种方式相关,至少由于从同一方法返回,因此为它们定义一个类可能是个好主意:
class HoldingPair {
private final Object first;
private final Object second;
public Object getFirst() { return first; }
public Object getSecond() { return second; }
public HoldingPair(Object a, Object b) {
first = a;
second = b;
}
... // hashCode, equal, toString
}
现在你的方法可以返回一个HoldingPair
对象,你可以直接使用它,例如
HoldingPair hold = method();
...
if (hold.getFirst() != null) {
...
}
if (hold.getSecond() != null) {
...
}
答案 1 :(得分:1)
您可以混合使用两种解决方案,但不能像python或scala那样进行多种处理。根据上下文,您总能找到一些非常好的东西。最简单的方法是:
Object hold[] = method();
Object obj1run1 = hold[0], obj2run1 = hold[1];
但是如果在语义上你可以创建自己的元组,那么这两个对象之间存在强大的联系。