El operador instanceOf no necesita comprobaciones nulas explícitas, ya que no lanza una excepción de puntero nulo si el operando es nulo.
En tiempo de ejecución, el resultado del operador instanceOf es verdadero si el valor de la expresión relacional no es nulo y la referencia se puede convertir al tipo de referencia sin generar una excepción de clase.
Si el operando es nulo, el operador instanceOf devuelve falso y, por lo tanto, no se requieren comprobaciones nulas explícitas.
Considérese el siguiente ejemplo,
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");
}
}
El uso correcto de instanceOf es como se muestra a continuación,
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");
}
}
+1 JLS: En tiempo de ejecución, el resultado del operador instanceof es cierto si el el valor de RelationalExpression no es nulo y la referencia se puede convertir (§15.16) al ReferenceType sin generar una ClassCastException. De lo contrario, el resultado es falso. http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#80289 – barrowc
pin @barrowc apuntado al punto! – naikus
He estado programando Java desde el '97 y esto era nuevo para mí. Gracias, +1! –