2012-05-10 18 views
8

Duplicar posible:
How to determine an object's class (in Java)?
Java determine which class an object isCómo identificar los tipos de objetos en Java

He siguiente método incompleta de la muestra para comparar el tipo de objeto de un objeto dado

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

} 

podemos llamarlo m étodo como

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

este método no trabaja realmente, me puede ayudar a hacer que funcione

+6

Mi tipo favorito de la mayoría de la pregunta. Esperando 45 respuestas en 30 segundos. –

+0

Utilice el operador 'instanceof'. 'If ​​(value instanceof Integer) {' – Dandy

+1

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

Respuesta

20

se le olvidó la .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"); 
} 

Tenga en cuenta que este tipo de código suele ser el signo de un diseño orientado a objetos pobres.

También tenga en cuenta que comparar la clase de un objeto con una clase y usar instanceof no es lo mismo. Por ejemplo:

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

es falso, mientras que

"foo" instanceof Object 

es cierto.

El uso de uno u otro depende de sus requisitos.

12

Es posible comparar las fichas de clase entre sí, por lo que podría utilizar value.getClass() == Integer.class. Sin embargo, la manera más simple y más canónica es utilizar 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"); 
    } 

Notas:

  • la única diferencia entre los dos es que la comparación de las fichas de clase detecta de juegos compatibles solamente, mientras que instanceof C partidos de subclases de C también. Sin embargo, en este caso, todas las clases enumeradas son final, por lo que no tienen subclases. Por lo tanto, instanceof probablemente esté bien aquí.
  • como declaró JB Nizet, tales comprobaciones no son de diseño OO. Es posible que pueda resolver este problema de una manera más OO, p.

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

Thanx thanx mucho peter – Harsha

+0

@ PéterTörök Lo siento, estoy completamente cansado y mezclé la "= sintaxis" con la "instancia de uno". Eliminaré mis comentarios ya que son irrelevantes. –

+0

@GuillaumePolet, no hay problema :-) –

3

Uso value instanceof YourClass

3

¿Quieres instanceof:

if (value instanceof Integer) 

Esto es cierto incluso para las subclases, que suele ser lo que quiere, y también es nula de fallos.Si realmente necesita la misma clase exacta, se podría hacer

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

o

if (Integer.class.equals(value.getClass()) 
Cuestiones relacionadas