Jeśli typ tablicy jest nieznany, nie można po prostu rzucać się Object[]
, a zatem nie może korzystać z metod (equals
, deepEquals
) w java.util.Arrays
.
Można jednak użyć odbicia, aby uzyskać długość i elementy tablic i porównać je rekursywnie (elementy mogą same być tablicami).
Oto metoda ogólnie narzędzie do porównywania dwóch obiektów (tablice są również obsługiwane), które pozwala jednej lub nawet zarówno do być null:
public static boolean equals (Object a, Object b) {
if (a == b) {
return true;
}
if (a == null || b == null) {
return false;
}
if (a.getClass().isArray() && b.getClass().isArray()) {
int length = Array.getLength(a);
if (length > 0 && !a.getClass().getComponentType().equals(b.getClass().getComponentType())) {
return false;
}
if (Array.getLength(b) != length) {
return false;
}
for (int i = 0; i < length; i++) {
if (!equals(Array.get(a, i), Array.get(b, i))) {
return false;
}
}
return true;
}
return a.equals(b);
}
Dodane niektóre części deklaracji metody (public static ...) - w przeciwnym razie wyglądało to na wywołanie metody ruby z przekazanym blokiem :-) – Vladimir