Si vous savez que vous allez renvoyer deux objets, vous pouvez également utiliser une paire générique :
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;
}
};
Modifier Une mise en œuvre plus complète de ce qui précède :
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();
}
}
Notes, principalement sur la rouille de Java et les génériques :
- les deux
a
et b
sont immuables.
-
makePair
La méthode statique vous aide avec le typage de la plaque de chaudière, que l'opérateur diamant dans Java 7 rendra moins ennuyeux. Il y a encore du travail à faire pour que ce soit vraiment agréable en ce qui concerne les génériques, mais ça devrait être bon maintenant. (c.f. PECS)
-
hashcode
et equals
sont générés par eclipse.
- le moulage au moment de la compilation dans le
cast
La méthode est bonne, mais ne semble pas tout à fait correcte.
- Je ne suis pas sûr que les caractères de remplacement dans
isInstance
sont nécessaires.
- Je viens d'écrire ceci en réponse à des commentaires, à titre d'illustration uniquement.
1 votes
La liste et les CSV sont-ils des vues différentes des mêmes données ? On dirait que ce dont vous avez besoin est un objet où vous avez un unique
List
et une sorte de table de consultation.0 votes
Question connexe : stackoverflow.com/questions/53453058/