instanceof
viene utilizzato per la determinazione della fase di esecuzione di tipo di un oggetto. Stai cercando di determinare se x
è davvero un oggetto di tipo J
quando il programma è in esecuzione, quindi compila.
Pensavate che dovesse causare un errore in fase di compilazione perché pensate che il compilatore non conosca il tipo x
?
Modifica
Mentre Kirk Woll ha commentato (grazie Kirk Woll!), Se si dovesse verificare se x
è un instanceof
una classe concreta, e il compilatore può determinare x
s' tipo, allora si otterrà un errore in fase di compilazione.
Dal linguaggio Java Specification:
Se un cast del RelationalExpression al ReferenceType sarebbe stata respinta come un errore di compilazione, quindi l'espressione relazionale instanceof produce anche un errore di compilazione. In una situazione del genere, il risultato dell'istanza di espressione non potrebbe mai essere vero.
Come esempio di questo:
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 a margine: non dimenticare di aggiungere un tag per la lingua. Ho aggiunto "java" per te. – EboMike
scusa dovrei avere – user439526