L'operatore instanceOf non richiede controlli nulli espliciti, in quanto non genera un'eccezione di puntatore nullo se l'operando è nullo.
In fase di esecuzione, il risultato dell'operatore instanceOf è true se il valore dell'espressione relazionale non è nullo e il riferimento può essere convertito nel tipo di riferimento senza generare un'eccezione di classe cast.
Se l'operando è nullo, l'operatore instanceOf restituisce false e quindi non sono richiesti controlli nulli espliciti.
consideri l'esempio seguente,
public static void main(String[] args) {
if(a != null && a instanceof ArrayList){ //Violation
System.out.println("In if block");
}
else
{
System.out.println("In else block");
}
}
L'uso corretto di instanceof è il seguente,
public static void main(String[] args) {
if(a instanceof ArrayList){ //Correct way
System.out.println("In if block");
}
else
{
System.out.println("In else block");
}
}
fonte
2015-04-01 08:02:16
+1 JLS: in fase di esecuzione, il risultato dell'operatore instanceof è vero se la il valore di RelationalExpression non è nullo e il riferimento potrebbe essere trasmesso (§15.16) a ReferenceType senza generare un ClassCastException. Altrimenti il risultato è falso. http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#80289 – barrowc
pin @barrowc puntato sul punto! – naikus
Ho programmato Java dal '97 e questa era una novità per me. Grazie, +1! –