web-dev-qa-db-ger.com

Verwendung von "instanceof" in Java

Wofür wird der Operator 'instanceof' verwendet?

Ich habe erfahren, dass Java den Operator instanceof hat. Können Sie erläutern, wo es eingesetzt wird und welche Vorteile es bietet?

287
Nikunj Patel

Grundsätzlich prüfen Sie, ob ein Objekt eine Instanz einer bestimmten Klasse ist. Normalerweise wird es verwendet, wenn Sie einen Verweis oder Parameter auf ein Objekt haben, das eine übergeordnete Klasse oder einen Interfacetyp aufweist und wissen müssen, ob das tatsächliche Objekt einen anderen Typ hat (normalerweise konkreter).

Beispiel:

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"); 
  }
}

Beachten Sie, dass, wenn Sie diesen Operator sehr oft verwenden müssen, dies im Allgemeinen ein Hinweis darauf ist, dass Ihr Design einige Fehler aufweist. In einer gut gestalteten Anwendung sollten Sie diesen Operator so wenig wie möglich verwenden (natürlich gibt es Ausnahmen von dieser allgemeinen Regel).

368
Thomas

instanceof wird verwendet, um zu überprüfen, ob ein Objekt eine Instanz einer Klasse, eine Instanz einer Unterklasse oder eine Instanz einer Klasse ist, die eine bestimmte Schnittstelle implementiert.

Lesen Sie hier mehr aus der Oracle-Sprachdefinition.

67
Jayendra

instanceof kann verwendet werden, um den tatsächlichen Typ eines Objekts zu bestimmen:

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 ist ein Schlüsselwort, mit dem geprüft werden kann, ob ein Objekt von einem bestimmten Typ ist.

Beispiel

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");
    } 
} 

Hier ist mein Quelle .

26
Barth