Controlla per il seguente codice:Se viene passato l'oggetto finale, dovrebbe essere ancora nullo il controllo?
@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;
}
Tutto sembra ben tuttavia il fatto che 0 possono essere restituiti in due diverse occasioni condizionali fa un po 'mi preoccupa. Se io invece spostare le assegnazioni delle variabili di distance
e distance2
verso l'alto, il mio IDE mi avverte che
if (o == null)
return 0;
sarebbe allora il codice 'morto'. Se questo è il caso, dovrebbe essere nullo anche essere controllato in questo scenario?
Quello che voglio dire è:
@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;
}
Un oggetto finale può essere nullo. –
il valore restituito 0 quando un oggetto è nullo sembra sbagliato in quanto gli oggetti non sono uguali. Preferirei un'eccezione in questo caso. – Henry
È un codice morto, perché 'o.t' innescherebbe un' NullPointerException' se 'o' è nullo. Quindi il controllo per null non è più necessario. Se 'o' non è nullo, allora il controllo sarebbe anche falso e" saltato ". E sì, dovresti controllare per null. A 'NullPointerException' non è necessario qui. – Tom