web-dev-qa-db-fra.com

Utilisation de "instanceof" dans Java

A quoi sert l'opérateur 'instanceof'?

J'ai appris que Java possède l'opérateur instanceof. Pouvez-vous préciser où il est utilisé et quels sont ses avantages?

287
Nikunj Patel

Fondamentalement, vous vérifiez si un objet est une instance d'une classe spécifique. Vous l'utilisez normalement lorsque vous avez une référence ou un paramètre à un objet de type super classe ou d'interface et que vous avez besoin de savoir si l'objet réel a un autre type (normalement plus concret).

Exemple:

public void doSomething(Number param) {
  if( param instanceof Double) {
    System.out.println("param is a Double");
  }
  else if( param instanceof Integer) {
    System.out.println("param is an Integer");
  }

  if( param instanceof Comparable) {
    //subclasses of Number like Double etc. implement Comparable
    //other subclasses might not -> you could pass Number instances that don't implement that interface
    System.out.println("param is comparable"); 
  }
}

Notez que si vous devez utiliser cet opérateur très souvent, cela signifie généralement que votre conception présente des défauts. Donc, dans une application bien conçue, vous devriez avoir à utiliser cet opérateur le moins possible (bien entendu, il existe des exceptions à cette règle générale).

368
Thomas

instanceof est utilisé pour vérifier si un objet est une instance d'une classe, une instance d'une sous-classe ou une instance d'une classe qui implémente une interface particulière.

Plus d'informations sur la définition du langage Oracle ici.

67
Jayendra

instanceof peut être utilisé pour déterminer le type réel d'un objet:

class A { }  
class C extends A { } 
class D extends A { } 

public static void testInstance(){
    A c = new C();
    A d = new D();
    Assert.assertTrue(c instanceof A && d instanceof A);
    Assert.assertTrue(c instanceof C && d instanceof D);
    Assert.assertFalse(c instanceof D);
    Assert.assertFalse(d instanceof C);
}
47
Jean Logeart

instanceof est un mot clé qui peut être utilisé pour tester si un objet est d'un type spécifié.

Exemple :

public class MainClass {
    public static void main(String[] a) {

    String s = "Hello";
    int i = 0;
    String g;
    if (s instanceof Java.lang.String) {
       // This is going to be printed
       System.out.println("s is a String");
    }
    if (i instanceof Integer) {
       // This is going to be printed as autoboxing will happen (int -> Integer)
       System.out.println("i is an Integer");
    }
    if (g instanceof Java.lang.String) {
       // This case is not going to happen because g is not initialized and
       // therefore is null and instanceof returns false for null. 
       System.out.println("g is a String");
    } 
} 

Voici mon source .

26
Barth