2009-10-29 9 views
63

Jestem nowicjusz Java. Próbuję dowiedzieć się, czy dana liczba jest dwukrotnie z czymś takim:Pierwsze typeof w Javie

if (typeof (items.elementAt(1))== Double) { 
     sum.add(i, items.elementAt(1)); 
} 

Czy wdzięczni, jeśli ktoś może mi powiedzieć jak zmienić składnię aby to działało poprawnie.

Odpowiedz

114

Spróbuj tego:

if (items.elementAt(1) instanceof Double) { 
    sum.add(i, items.elementAt(1)); 
} 
+13

+1. Myślę też, że faktycznie chcesz sprawdzić 'elementAt (0)'; większość rzeczy w Javie ma wartość zero. – ChssPly76

8

Odbicie jest wolniejszy, ale pracuje w sytuacji, gdy chcemy wiedzieć, czy to jest typu psa lub kota, a nie instancją zwierzęcia. Tak więc możesz zrobić coś w rodzaju:

if(null != items.elementAt(1) && items.elementAt(1).getClass().toString().equals("Cat")) 
{ 
//do whatever with cat.. not any other instance of animal.. eg. hideClaws(); 
} 

Nie mówiąc powyższą odpowiedź nie działa, z wyjątkiem części kontroli zerowej jest konieczne.

Innym sposobem na odpowiedź jest użycie generycznych i masz gwarancję, że Double będzie elementem każdego elementu.

List<Double> items = new ArrayList<Double>(); 
+7

Czy możesz sprawić, by ludzie nauczyli się podawać powody negatywnej oceny? Jestem też nowy w java i chciałbym zobaczyć, co jest nie tak z tą odpowiedzią, więc nie muszę tego wypróbowywać! – enrey

+1

Chciałbym uniknąć porównywania z zakodowanym na sztywno ciągiem, co jeśli zmieni się nazwa klasy, istnieje również instanceof, więc używamy tego. –

+0

@enrey Jaka jest przewaga tego nad instanceof? –

2

Użyj wyrażenia regularnego, aby wykonać to zadanie. Proszę zapoznać się z poniższym kodem.

public static void main(String[] args) { 
    try { 

     BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
     System.out.print("Enter your content: "); 
     String data = reader.readLine();    
     boolean b1 = Pattern.matches("^\\d+$", data); 
     boolean b2 = Pattern.matches("[0-9a-zA-Z([+-]?\\d*\\.+\\d*)]*", data); 
     boolean b3 = Pattern.matches("^([+-]?\\d*\\.+\\d*)$", data); 
     if(b1) { 
      System.out.println("It is integer."); 
     } else if(b2) { 
      System.out.println("It is String. "); 
     } else if(b3) { 
      System.out.println("It is Float. "); 
     }   
    } catch (IOException ex) { 
     Logger.getLogger(TypeOF.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 
1

Ponieważ jest to pierwsze pytanie z Google dodam ten JavaScript styl typeof alternatywę również tutaj:

myObject.getClass().getName() // String 
Powiązane problemy