2009-10-29 8 views
63

Soy un novato en Java. Estoy tratando de averiguar si un número es un doble con algo como esto:Obteniendo typeof en Java

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

agradecería si alguien me podría decir cómo reorganizar la sintaxis para que esto funcione correctamente.

Respuesta

114

Prueba esto:

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

+1. También estoy pensando que realmente quieres verificar 'elementAt (0)'; la mayoría de las cosas en Java son basadas en cero. – ChssPly76

8

La reflexión es más lento, pero funciona para una situación cuando se quiere saber si es de tipo perro o un gato y no una instancia del animal. Entonces haría algo como:

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

No diciendo que la respuesta anterior no funciona, excepto que la parte de comprobación nula es necesaria.

Otra forma de responder es el uso de medicamentos genéricos y se garantiza que tiene el doble como cualquier elemento de los elementos.

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

¿Podría por favor que la gente aprenda a poner razones para la calificación negativa? También soy nuevo en Java y me gustaría ver qué pasa con esta respuesta, así que no tengo que probarlo. – enrey

+1

Evitaría comparar con una cadena codificada, qué pasa si el nombre de la clase cambia, también existe instanceof, así que lo usamos. –

+0

@enrey ¿Cuál es la ventaja de esto en vez de instanceof? –

2

Utilice la expresión regular para realizar esta tarea. Por favor, consulte el siguiente código.

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

Dado que esta es la primera pregunta de Google Voy a añadir el estilo typeof alternativa JavaScript aquí también:

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