Wegen der Löschung können Sie nicht. Das Beste, was Sie tun können, ist, in der Tupel-Klasse den Typ zu speichern, den Sie für das Tuple planen, um es in einem "java.lang.Class" -Feldelement zu speichern. Dann könnten Sie diese Felder vergleichen, um sicherzustellen, dass die Tupelklasse dieselben Typen enthält.
Siehe auch diesen Thread: What is the equivalent of the C++ Pair<L,R> in Java?
Es würde helfen, wenn Sie mehr über Ihre Klasse schreiben. Ich denke, die ungeprüfte Besetzung und Ihre Anzahl von Feldern, die Sie gleichsetzen, bedeutet, dass es Tuple sein sollte < E, F > nein?
EDIT: hier ist eine nützliche Pair-Klasse, die ich regelmäßig verwende (Sie können Ihre Tuple-Klasse bei Bedarf anpassen). Beachten Sie, dass diese Klasse, ähnlich den Vorschlägen anderer, die befragten Mitglieder dazu bringt, die Frage der Gleichheit zu entscheiden. Ihr Use Case sollte bestimmen, ob die Gleichheit tatsächlich auf dem Typ der enthaltenen Elemente basiert.
/**
* Adapted from http://forums.sun.com/thread.jspa?threadID=5132045
*
*
* @author Tim Harsch
*
* @param <L>
* @param <R>
*/
public class Pair<L, R> {
private final L left;
private final R right;
public R getRight() {
return right;
} // end getter
public L getLeft() {
return left;
} // end getter
public Pair(final L left, final R right) {
this.left = left;
this.right = right;
} // end constructor
public static <A, B> Pair<A, B> create(A left, B right) {
return new Pair<A, B>(left, right);
} // end factory method
@Override
public final boolean equals(Object o) {
if (!(o instanceof Pair<?,?>))
return false;
final Pair<?, ?> other = (Pair<?, ?>) o;
return equal(getLeft(), other.getLeft()) && equal(getRight(), other.getRight());
} // end method
public static final boolean equal(Object o1, Object o2) {
if (o1 == null) {
return o2 == null;
}
return o1.equals(o2);
} // end method
@Override
public int hashCode() {
int hLeft = getLeft() == null ? 0 : getLeft().hashCode();
int hRight = getRight() == null ? 0 : getRight().hashCode();
return hLeft + (37 * hRight);
} // end method
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append('<');
if(left == null) {
sb.append("null");
} else {
sb.append(left.toString());
} // end if
sb.append(',');
if(right == null) {
sb.append("null");
} else {
sb.append(right.toString());
} // end if
sb.append('>');
return sb.toString();
} // end method
} // end class
BTW bedeutet diese Logik nicht, dass "a", "a" und "a", "b" gleich sind? Wäre es nicht einfacher zu schreiben "wenn a0 = a0 und a1 = a1 oder a0 = a1 und a1 = a0 ..." –
Wenn Sie zulassen, dass Ihre a0 und a1 null sind, stellen Sie sicher, dass Sie Prüfungen hinzufügen dafür. –