我想从一个Java方法返回两个对象,我想知道有什么好方法可以做到这一点?
我能想到的可能方法是:返回一个HashMap
(因为这两个对象是相关的)或返回一个Object
对象的ArrayList
。
更准确地说,我想返回的两个对象是(a)对象的List
和(b)相同对象的逗号分隔名称。
我想从一个方法返回这两个对象,因为我不想通过遍历对象列表来获得逗号分隔的名称(在这个方法中,我可以在相同的循环中做到这一点)。
不知何故,返回HashMap
看起来并不是一种非常优雅的方式。
发布于 2009-01-19 13:58:02
如果要返回两个对象,通常需要返回封装这两个对象的单个对象。
您可以返回NamedObject
对象列表,如下所示:
public class NamedObject<T> {
public final String name;
public final T object;
public NamedObject(String name, T object) {
this.name = name;
this.object = object;
}
}
然后,您可以很容易地返回一个List<NamedObject<WhateverTypeYouWant>>
。
还有:为什么要返回逗号分隔的名称列表,而不是List<String>
?或者更好的方法是返回一个Map<String,TheObjectType>
,其中的键是对象的名称和值(除非您的对象有指定的顺序,在这种情况下,NavigableMap
可能就是您想要的。
发布于 2013-04-04 04:42:30
如果您调用的方法是私有的,或者是从一个位置调用的,请尝试
return new Object[]{value1, value2};
调用者如下所示:
Object[] temp=myMethod(parameters);
Type1 value1=(Type1)temp[0]; //For code clarity: temp[0] is not descriptive
Type2 value2=(Type2)temp[1];
David Hanak的配对示例没有语法上的好处,并且被限制为两个值。
return new Pair<Type1,Type2>(value1, value2);
调用者看起来像这样:
Pair<Type1, Type2> temp=myMethod(parameters);
Type1 value1=temp.a; //For code clarity: temp.a is not descriptive
Type2 value2=temp.b;
发布于 2009-01-19 14:09:42
当我用Java编写代码时,我几乎总是最终定义n-Tuple类。例如:
public class Tuple2<T1,T2> {
private T1 f1;
private T2 f2;
public Tuple2(T1 f1, T2 f2) {
this.f1 = f1; this.f2 = f2;
}
public T1 getF1() {return f1;}
public T2 getF2() {return f2;}
}
我知道这有点难看,但它是有效的,而且你只需要定义一次你的元组类型。元组是Java真正缺乏的东西。
编辑: David Hanak的示例更加优雅,因为它避免了定义getter,并且仍然保持对象的不可变性。
https://stackoverflow.com/questions/457629
复制相似问题