2009-10-29 7 views
63

Je suis un débutant Java. J'essaie de savoir si un nombre est un double avec quelque chose comme ceci:Obtenir typeof en Java

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

apprécierait si quelqu'un pouvait me dire comment réorganiser la syntaxe pour faire ce travail correctement.

Répondre

114

Essayez ceci:

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

+1. Je pense aussi que vous voulez vraiment vérifier 'elementAt (0)'; la majorité des choses en Java est basée sur zéro. – ChssPly76

8

La réflexion est plus lent, mais fonctionne pour une situation où vous voulez savoir si c'est de type chien ou un chat et non une instance d'animaux. Alors vous feriez quelque chose comme:

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

Ne dis pas que la réponse ne fonctionne pas, sauf la partie vérifiait nulle est nécessaire.

Une autre façon de répondre à cela est d'utiliser des génériques et vous êtes assuré d'avoir Double comme tout élément d'éléments.

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

Pourriez-vous s'il vous plaît les gens à apprendre à mettre des raisons de notation négative? Je suis nouveau en Java et j'aimerais voir ce qui ne va pas avec cette réponse, donc je n'ai pas à l'essayer! – enrey

+1

J'éviterais de comparer à une chaîne codée en dur, si le nom de classe change, aussi instanceof existe donc nous l'utilisons. –

+0

@enrey Quel est l'avantage de ceci sur instanceof? –

2

Utilisez l'expression régulière pour réaliser cette tâche. S'il vous plaît se référer au code ci-dessous.

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

Depuis c'est la première question de Google que je vais ajouter le style JavaScript typeof alternatif ici aussi:

myObject.getClass().getName() // String 
Questions connexes