2012-05-10 35 views
8

Powiel możliwe:
How to determine an object's class (in Java)?
Java determine which class an object isJak zidentyfikować typy obiektów w Javie

Mam następujący przykładowy niepełny sposób porównać typ obiektu danego obiektu

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

} 

możemy nazwać ten m ethod jak

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

ta metoda nie jest faktycznie działa, proszę mi pomóc, aby to działało

+6

mój ulubiony rodzaj pytania. Oczekiwanie 45 odpowiedzi w ciągu 30 sekund. –

+0

Użyj operatora 'instanceof'. 'If ​​(wartość instanceof Integer) {' – Dandy

+1

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

Odpowiedz

20

zapomniałeś .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"); 
} 

pamiętać, że ten rodzaj kodu jest zazwyczaj oznaką słabej konstrukcji OO.

Należy również pamiętać, że porównanie klasy obiektu z klasą i użycie instanceof to nie to samo. Na przykład:

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

jest fałszywa, natomiast

"foo" instanceof Object 

jest prawdą.

Niezależnie od tego, czy jedno lub drugie musi być używane, zależy od wymagań.

12

Możesz porównać znaki klasy do siebie, więc można użyć value.getClass() == Integer.class. Jednakże, prostsze i bardziej kanoniczny sposobem jest użycie instanceof:

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

Uwagi:

  • jedyną różnicą między nimi jest, że porównując znaki klasy wykrywa dokładny pasuje tylko, podczas instanceof C mecze na podklasy C też. Jednak w tym przypadku wszystkie wymienione klasy są final, więc nie mają podklas. Tak więc prawdopodobnie tutaj jest instanceof.
  • jak stwierdził JB Nizet, takie kontrole nie mają charakteru OO. Być może uda ci się rozwiązać ten problem w bardziej otwarty sposób, np.

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

Thanx thanx dużo peter – Harsha

+0

@ PéterTörök Przepraszamy jestem całkowicie zmęczony i pomieszałem "== syntax" z "instanceof one". Usuwam moje komentarze, ponieważ są nieistotne. –

+0

@GuillaumePolet, brak problemów :-) –

3

Zastosowanie value instanceof YourClass

3

Chcesz instanceof:

if (value instanceof Integer) 

To będzie prawdziwe nawet dla podklasy, która jest zwykle to, co chcesz, i to jest również null bezpieczne.Jeśli naprawdę trzeba dokładnie tę samą klasę, można zrobić

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

lub

if (Integer.class.equals(value.getClass()) 
Powiązane problemy