Sprawdź poniższy kod:Jeśli ostateczny obiekt jest przekazywany, powinno być nadal zaznaczone zero?
@Override
public int compareTo(final Intersection o) {
if (o == null)
return 0;
double distance = t;
double distance2 = o.t;
if (distance == distance2)
return 0;
return distance2 > distance ? -1 : 1;
}
Wszystko wydaje się dobrze jednak fakt, że 0 mogą zostać zwrócone na dwóch różnych okazjach warunkowych ma nieco przeszkadza mi. Jeśli ja jednak przenieść zmienne przyporządkowania distance
i distance2
do góry, mój IDE ostrzega mnie, że
if (o == null)
return 0;
byłby wtedy „martwy” kod. Jeśli tak, to czy w tym scenariuszu powinna być sprawdzana wartość null?
Chodzi mi o to:
@Override
public int compareTo(final Intersection o) {
double distance = t;
double distance2 = o.t;
if (o == null)
return 0;
if (distance == distance2)
return 0;
return distance2 > distance ? -1 : 1;
}
Ostateczny obiekt może mieć wartość NULL. –
Wartość zwracana 0, gdy jeden obiekt ma wartość NULL, wydaje się błędna, ponieważ obiekty nie są równe. Wolałbym wyjątek w tym przypadku. – Henry
To jest martwy kod, ponieważ 'o.t' powodowałoby' NullPointerException', jeśli 'o' jest puste. Dlatego też czek na wartość zerową nie jest już potrzebny. Jeśli 'o' nie ma wartości NULL, wówczas kontrola również będzie fałszywa i" pomijana ". I tak, powinieneś sprawdzić zero. "NullPointerException" jest tutaj niepotrzebny. – Tom