instanceof
se utiliza para determinar el tipo de un objeto en tiempo de ejecución. Está intentando determinar si x
es realmente un objeto del tipo J
cuando el programa se está ejecutando, por lo que se compila.
¿Pensaba que debería generar un error en tiempo de compilación porque cree que el compilador no conoce el tipo x
?
Editar
Como Kirk Woll ha comentado (gracias Kirk Woll!), Si estuviera mirando si x
es un instanceof
una clase concreta, y el compilador puede determinar x
's tipo, por lo que recibirá un error en el tiempo de compilación.
A partir de la especificación del lenguaje Java:
Si un molde de la RelationalExpression a la ReferenceType sería rechazado como un error de compilación, entonces la expresión relacional instanceof asimismo produce un error en tiempo de compilación. En tal situación, el resultado de la instancia de expresión nunca podría ser cierto.
Como un ejemplo de esto:
import java.io.Serializable;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
class SerializableClass implements Serializable
{
private writeObject(ObjectOutputStream out) {}
private readObject(ObjectInputStream in) {}
}
public class DerivedSerializableClass extends SerializableClass
{
public static void main(String[] args)
{
DerivedSerializableClass dsc = new DerivedSerializableClass();
if (dsc instanceof DerivedSerializableClass) {} // fine
if (dsc instanceof Serializable) {} // fine because check is done at runtime
if (dsc instanceof String) {} // error because compiler knows dsc has no derivation from String in the hierarchy
Object o = (Object)dsc;
if (o instanceof DerivedSerializableClass) {} // fine because you made it Object, so runtime determination is necessary
}
}
Nota al margen: no olvide agregar una etiqueta para el idioma. Añadí "java" para ti. – EboMike
lo siento, debería tener – user439526