如何从Java方法返回多个对象?
我想从Java方法返回两个对象,并且想知道这样做的好方法是什么?
我能想到的可能方法是:返回a(因为两个对象是相关的)或返回对象的。HashMap
ArrayList
Object
更准确地说,我要返回的两个对象是(a)对象和(b)逗号分隔的相同名称。List
我想从一个方法返回这两个对象,因为我不想循环访问对象列表以获取逗号分隔的名称(我可以在此方法的同一循环中执行此操作)。
不知何故,返回a看起来不是一种非常优雅的方式。HashMap
我想从Java方法返回两个对象,并且想知道这样做的好方法是什么?
我能想到的可能方法是:返回a(因为两个对象是相关的)或返回对象的。HashMap
ArrayList
Object
更准确地说,我要返回的两个对象是(a)对象和(b)逗号分隔的相同名称。List
我想从一个方法返回这两个对象,因为我不想循环访问对象列表以获取逗号分隔的名称(我可以在此方法的同一循环中执行此操作)。
不知何故,返回a看起来不是一种非常优雅的方式。HashMap
如果要返回两个对象,通常需要返回一个封装这两个对象的对象。
您可以返回对象列表,如下所示: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>>
另外:为什么要返回逗号分隔的名称列表,而不是?或者更好的是,返回 a,其中键是对象的名称和值(除非您的对象指定了顺序,在这种情况下,a 可能是您想要的。List<String>
Map<String,TheObjectType>
NavigableMap
如果您知道要返回两个对象,也可以使用泛型对:
public class Pair<A,B> {
public final A a;
public final B b;
public Pair(A a, B b) {
this.a = a;
this.b = b;
}
};
编辑更全面地实现上述内容:
package util;
public class Pair<A,B> {
public static <P, Q> Pair<P, Q> makePair(P p, Q q) {
return new Pair<P, Q>(p, q);
}
public final A a;
public final B b;
public Pair(A a, B b) {
this.a = a;
this.b = b;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((a == null) ? 0 : a.hashCode());
result = prime * result + ((b == null) ? 0 : b.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
@SuppressWarnings("rawtypes")
Pair other = (Pair) obj;
if (a == null) {
if (other.a != null) {
return false;
}
} else if (!a.equals(other.a)) {
return false;
}
if (b == null) {
if (other.b != null) {
return false;
}
} else if (!b.equals(other.b)) {
return false;
}
return true;
}
public boolean isInstance(Class<?> classA, Class<?> classB) {
return classA.isInstance(a) && classB.isInstance(b);
}
@SuppressWarnings("unchecked")
public static <P, Q> Pair<P, Q> cast(Pair<?, ?> pair, Class<P> pClass, Class<Q> qClass) {
if (pair.isInstance(pClass, qClass)) {
return (Pair<P, Q>) pair;
}
throw new ClassCastException();
}
}
注意,主要是关于Java和泛型的生锈:
a
b
makePair
静态方法可以帮助您进行样板键入,Java 7中的菱形运算符将使它不那么烦人。有一些工作可以使这个非常好的re:泛型,但现在应该没问题了。(c.f. PECS)hashcode
并由日食生成。equals
cast
isInstance