estoy leyendo esto:
http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.20.2¿Por qué `instanceof` error en lugar de devolver` false` cuando se usa para 2 clases incompatibles?
Dicen:
examinar el programa de ejemplo:
class Point { int x, y; }
class Element { int atomicNumber; }
class Test {
public static void main(String[] args) {
Point p = new Point();
Element e = new Element();
if (e instanceof Point) { // compile-time error
System.out.println("I get your point!");
p = (Point)e; // compile-time error
}
}
}
La expresión
instanceof
es incorrecta porque ninguna instancia deElement
o cualquiera de sus posibles subclases (ninguna se muestra aquí) podría ser una instancia de cualquier subclase dePoint
.
¿Por qué esto resulta en un error, en lugar de simplemente en instanceof
devolviendo falso?
Gracias,
JDelage
Parece que su experiencia anterior puede estar en los lenguajes que, en su mayoría, no se escribieron y se interpretaron en su mayoría (por ejemplo, la mayoría de los BASIC) en lugar de escribir y compilar fuertemente. Con un lenguaje que se interpreta principalmente, casi toda validación de tipo tipo ocurre en tiempo de ejecución. Sin embargo, con los lenguajes compilados, el compilador puede hacer bastante "análisis de flujo de tipo y ejecución". Como resultado, si encuentra rutas que nunca se pueden ejecutar, puede eliminar el código en esa ruta (es decir, eliminar el código inactivo). Y genera un error si encuentra una operación que nunca puede tener éxito. – chaotic3quilibrium