172 votes

A quoi sert l'opérateur "instanceof" en Java ?

Quel est le instanceof à quoi sert l'opérateur ? J'ai vu des choses comme

if (source instanceof Button) {
    //...
} else {
    //...
}

Mais rien de tout cela n'avait de sens pour moi. J'ai fait mes recherches, mais je n'ai trouvé que des exemples sans aucune explication.

43 votes

Il n'y a rien de mal à poser des questions ici, mais si vous apprenez Java, vous devriez peut-être vous procurer un livre. N'importe quel livre Java décent aurait la réponse à cette question et aux 1000 suivantes que vous allez avoir.

0 votes

Un tel opérateur a de nombreuses utilisations spécifiques. Il s'agirait d'une question spécifique si elle demandait une explication pour l'un des exemples qui n'a pas de sens pour vous.

3 votes

Les réponses ci-dessous sont correctes, mais notez que instanceof est un opérateur surutilisé ; 9 fois sur 10, il peut être remplacé par une utilisation correcte du polymorphisme (pas toujours, mais souvent).

234voto

instanceof Le mot clé est un opérateur binaire utilisé pour tester si un objet (instance) est un sous-type d'un Type donné.

Imaginez :

interface Domestic {}
class Animal {}
class Dog extends Animal implements Domestic {}
class Cat extends Animal implements Domestic {}

Imaginez un dog objet créé avec Object dog = new Dog() alors :

dog instanceof Domestic // true - Dog implements Domestic
dog instanceof Animal   // true - Dog extends Animal
dog instanceof Dog      // true - Dog is Dog
dog instanceof Object   // true - Object is the parent type of all objects

Cependant, avec Object animal = new Animal(); ,

animal instanceof Dog // false

parce que Animal est un supertype de Dog et peut-être moins "raffiné".

Et,

dog instanceof Cat // does not even compile!

Cela s'explique par le fait que Dog n'est ni un sous-type ni un supertype de Cat et il ne la met pas non plus en œuvre.

Notez que la variable utilisée pour dog ci-dessus est de type Object . Ceci pour montrer instanceof es un temps de fonctionnement et nous amène à un/des cas d'utilisation : réagir différemment en fonction du type d'objet au moment de l'exécution. .

Des choses à noter : expressionThatIsNull instanceof T est faux pour tous les types T .

44voto

Michael Petrotta Points 35647

C'est un opérateur qui renvoie vrai si le côté gauche de l'expression est un exemple de le nom de la classe sur le côté droit.

Pensez-y de cette façon. Supposons que toutes les maisons de votre quartier aient été construites à partir des mêmes plans. Dix maisons (objets), un ensemble de plans (définition de la classe).

instanceof est un outil utile lorsque vous avez une collection d'objets et que vous n'êtes pas sûr de ce qu'ils sont. Disons que vous avez une collection de contrôles sur un formulaire. Vous voulez lire l'état coché de toutes les cases à cocher qui s'y trouvent, mais vous ne pouvez pas demander l'état coché à un simple objet. Au lieu de cela, vous vérifiez si chaque objet est une case à cocher, et si c'est le cas, vous le transformez en case à cocher et vérifiez ses propriétés.

if (obj instanceof Checkbox)
{
    Checkbox cb = (Checkbox)obj;
    boolean state = cb.getState();
}

15 votes

C'est-à-dire qu'en utilisant instanceof peut faire en sorte que l'on puisse se baisser en toute sécurité.

31voto

fireshadow52 Points 3796

Comme décrit sur ce site :

Le site instanceof peut être utilisé pour tester si un objet est de type type spécifique...

if (objectReference instanceof type)

Un exemple rapide :

String s = "Hello World!"
return s instanceof String;
//result --> true

Toutefois, l'application instanceof sur une variable/expression à référence nulle renvoie faux.

String s = null;
return s instanceof String;
//result --> false

Étant donné qu'une sous-classe est un "type" de sa super-classe, vous pouvez utiliser l'attribut instanceof pour vérifier ceci...

class Parent {
    public Parent() {}
}

class Child extends Parent {
    public Child() {
        super();
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        System.out.println( child instanceof Parent );
    }
}
//result --> true

J'espère que cela vous aidera !

15voto

Purendra Points 21

Cet opérateur permet de déterminer le type d'un objet. Il renvoie un boolean valeur.

Par exemple

package test;

import java.util.Date;
import java.util.Map;
import java.util.HashMap;

public class instanceoftest
{
    public static void main(String args[])
    {
        Map m=new HashMap();
        System.out.println("Returns a boolean value "+(m instanceof Map));
        System.out.println("Returns a boolean value "+(m instanceof HashMap));
        System.out.println("Returns a boolean value "+(m instanceof Object));
        System.out.println("Returns a boolean value "+(m instanceof Date));
    }
} 

la sortie est :

Returns a boolean value true
Returns a boolean value true
Returns a boolean value true
Returns a boolean value false

14voto

Daniel A. White Points 91889

Si source es un object variable, instanceof est un moyen de vérifier s'il s'agit d'une Button ou pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X