« Bonjour, Amigo ! Tu as déjà rencontré l'opérateur instanceof. Aujourd'hui, je vais te dire comment et où il peut être utilisé. instanceof est un opérateur très simple et efficace. »

« On croirait que tu essaies de me le vendre ! »

« C'est vraiment très simple. On l'utilise comme ceci : 'objet' instanceof 'classe'. »

Il vérifie si un objet est une instance d'une classe particulière. C'est plus facile que l'explication peut le laisser penser. Regarde cet exemple :

Code Description
Object o = new Integer(3);
boolean isInt = o instanceof Integer;
isInt aura la valeur true. L'objet référencé par la variable o est une instance de la classe Integer.
Object o = "Mama";
boolean isInt = o instanceof Integer;
isInt aura la valeur false. L'objet référencé par la variable o n'est pas une instance de la classe Integer. C'est un objet String.
InputStream is = new FileInputStream("");
boolean isFIS = is instanceof FileInputStream;
isFIS aura la valeur true. L'objet référencé par la variable o est une instance de la classe FileInputStream.

« Oui, c'est très simple. »

« Cet opérateur tient également compte de l'héritage. Regarde un peu. »

Code Description
class Animal
{
}
class Cat extends Animal
{
}
class Tiger extends Cat
{
}
Ici, nous avons trois déclarations de classe : Animal, Cat et Tiger. Cat hérite d'Animal. Et Tiger hérite de Cat.
Object o = new Tiger();
boolean isCat = o instanceof Cat;
boolean isTiger = o instanceof Tiger;
boolean isAnimal = o instanceof Animal;
isCat aura la valeur true.
isTiger aura la valeur true.
isAnimal aura la valeur true.
Object o = new Animal();
boolean isCat = o instanceof Cat;
boolean isTiger = o instanceof Tiger;
boolean isAnimal = o instanceof Animal;
isCat aura la valeur false.
isTiger aura la valeur false.
isAnimal aura la valeur true.

Et même les interfaces :

Code Description
interface Moveable
{
}
class Cat
{
}
class TomCat extends Cat implements Moveable
{
}
Création de deux classes : Cat, TomCat et de l'interface Moveable
Cat o = new TomCat();
boolean isCat = o instanceof Cat;
boolean isMoveable = o instanceof Moveable;
boolean isTom = o instanceof TomCat;
isCat aura la valeur true.
isMoveable aura la valeur true.
isTom aura la valeur true.
Cat o = new Cat();
boolean isCat = o instanceof Cat;
boolean isMoveable = o instanceof Moveable;
boolean isTom = o instanceof TomCat;
isCat aura la valeur true.
isMoveable aura la valeur false.
isTom aura la valeur false.

L'opérateur instanceof ressemble à ceci : a instanceof B.

En d'autres termes, l'opérateur instanceof renverra true si :

1) la variable a stocke une référence à un objet de type B

2) la variable a stocke une référence à un objet dont la classe hérite de B

3) la variable a stocke une référence à un objet qui implémente l'interface B

Sinon, l'opérateur instanceof renvoie false.

« J'ai compris. Mais pourquoi est-ce nécessaire, tonton Rishi ? »

« Ellie t'expliquera tout à ce sujet aujourd'hui. C'est vraiment un opérateur très commode. Tu en seras pleinement convaincu aujourd'hui. »