2012-05-10 11 views
8

Mögliche Duplizieren identifizieren:
How to determine an object's class (in Java)?
Java determine which class an object isWie Objekttypen in Java

Ich habe folgende Beispiel unvollständige Methode den Objekttyp eines bestimmten Objekts

public void test(Object value) { 

     if (value.getClass() == Integer) { 
      System.out.println("This is an Integer"); 
     }else if(value.getClass() == String){ 
      System.out.println("This is a String"); 
     }else if(value.getClass() == Float){ 
      System.out.println("This is a Fload"); 
     } 

} 
vergleichen

wir können dies m nennen ethode wie

test("Test"); 
test(12); 
test(10.5f); 

diese Methode nicht wirklich funktioniert, bitte helfen Sie mir, es

+6

Mein Lieblings Art der Frage tun. Erwartet 45 Antworten innerhalb von 30 Sekunden. –

+0

Verwenden Sie den Operator 'instanceof'. 'If ​​(Wert instanceof Integer) {' – Dandy

+1

Duplikate: http://stackoverflow.com/q/541749/1140748; http://StackOverflow.com/q/6149677/1140748 –

Antwort

20

Sie haben vergessen, die .class:

if (value.getClass() == Integer.class) { 
    System.out.println("This is an Integer"); 
} 
else if (value.getClass() == String.class) { 
    System.out.println("This is a String"); 
} 
else if (value.getClass() == Float.class) { 
    System.out.println("This is a Float"); 
} 

Beachten Sie, dass diese Art von Code in der Regel ein Zeichen für ein schlechtes OO-Design ist.

Beachten Sie auch, dass der Vergleich der Klasse eines Objekts mit einer Klasse und die Verwendung von instanceof nicht das Gleiche ist. Zum Beispiel:

"foo".getClass() == Object.class 

ist falsch, während

"foo" instanceof Object 

wahr ist.

Ob die eine oder andere verwendet werden muss, hängt von Ihren Anforderungen ab.

12

zu machen arbeiten können Sie Klasse Token miteinander vergleichen zu können, so könnten Sie value.getClass() == Integer.class verwenden. Allerdings ist die einfachere und kanonische Weise instanceof zu verwenden:

if (value instanceof Integer) { 
     System.out.println("This is an Integer"); 
    } else if(value instanceof String) { 
     System.out.println("This is a String"); 
    } else if(value instanceof Float) { 
     System.out.println("This is a Float"); 
    } 

Hinweise:

  • der einzige Unterschied zwischen den beiden ist, dass Token Vergleich Klasse erkennt exakt übereinstimmt nur, während instanceof C Treffern für die Unterklassen von C auch. In diesem Fall sind jedoch alle aufgelisteten Klassen final, daher haben sie keine Unterklassen. Also ist instanceof hier wohl in Ordnung.
  • wie JB Nizet erklärte, solche Überprüfungen sind nicht OO-Design. Sie können dieses Problem möglicherweise auf eine noch größere Weise lösen, z.

    System.out.println("This is a(n) " + value.getClass().getSimpleName()); 
    
+0

Danke vielen Peter – Harsha

+0

@ PéterTörök Sorry ich bin total müde und habe die "== Syntax" mit dem "instanceof one" verwechselt. Ich werde meine Kommentare entfernen, da sie irrelevant sind. –

+0

@ GuillaumePolet, keine probs :-) –

3

Verwenden value instanceof YourClass

3

Sie wollen instanceof:

if (value instanceof Integer) 

Dies auch für Unterklassen wahr sein wird, die in der Regel ist das, was Sie wollen, und es ist auch null sicher.Wenn Sie wirklich die exakt gleiche Klasse benötigen, könnten Sie

if (value.getClass() == Integer.class) 

oder

if (Integer.class.equals(value.getClass()) 
Verwandte Themen