instanceof
est utilisé pour déterminer le type d'un objet à l'exécution. Vous essayez de déterminer si x
est vraiment un objet de type J
lorsque le programme est en cours d'exécution, donc il compile.
Pensez-vous que cela devrait entraîner une erreur de compilation parce que vous pensez que le compilateur ne connaît pas le type de x
?
Modifier
Comme Kirk Woll a commenté (merci Kirk Woll!), Si vous vérifiez si x
est une instanceof
une classe concrète, et le compilateur peut déterminer le type de x
, vous obtiendrez une erreur au moment de la compilation.
De la spécification du langage Java:
Si une distribution du RelationalExpression au referenceType serait rejetée comme une erreur de compilation, l'expression relationnelle instanceof produit également une erreur de compilation. Dans une telle situation, le résultat de l'instance de l'expression ne pourrait jamais être vrai.
À titre d'exemple:
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
}
}
Note latérale - s'il vous plaît ne pas oublier d'ajouter un tag pour la langue. J'ai ajouté "java" pour vous. – EboMike
désolé je devrais avoir – user439526