To pytanie zostało zadane wcześniej, ale nie znalazłem przyzwoitego wdrożenia z wyjaśnieniem.Java: null safe compareTo method
public int compareTo(Object o)
{
if (this == null || o == null)
{
return 0;
}
Tok tmp = (Tok) o;
if (this.rang < tmp.rang)
{
return -1;
} else if (this.rang > tmp.rang) {
return 1;
} else {
return 0;
}
}
Przeczytałem dwa podobne pytania, które jeszcze znalazłem; nalegają na wdrożenie innej metody. Nie rozumiem, dlaczego to nie powinno działać. Metoda pobiera dodatkowy obiekt i sprawdza, czy jest to poprawna instancja, czy też po prostu zwraca 0123,, po prostu zwraca 0
; jaki byłby najłatwiejszy sposób implementacji bezpiecznego zerowania compareTo
.
Realizacja że pracował dla mnie było:
public int compareTo(Object o)
{
if (o == null)
{
return 0;
}
Tok tmp = (Tok) o;
if (this.rang < tmp.rang)
{
return -1;
} else if (this.rang > tmp.rang) {
return 1;
} else {
return 0;
}
}
To nie jest optymalna realizacja jeden powinien wyglądać w co dobrzy ludzie napisali tutaj jako odpowiedzi. Dla mojego konkretnego przypadku było to wystarczająco przyzwoite, ponieważ nigdy nie jest puste, ale otrzymany obiekt może mieć wartość NULL, a początkowa implementacja stwierdza, że albo ma zerowy wynik 0. Tak więc, jeśli dany obiekt ma wartość zerową, zwracane jest 0.
'this' to ** nigdy **' null' w Javie. –
@MattBall prawdopodobnie miał na myśli ** this.someInstance ** – PermGenError
to nigdy nie może być nieważne –