2012-01-30 7 views
9

Por favor, ayudarme a completar mi método estaVacia:Dado que un objeto es una matriz de cualquier tipo, ¿cómo se prueba que está vacío en Java?

public static boolean isEmpty(Object test){ 
    if (test==null){ 
     return true; 
    } 
    if (test.getClass().isArray()){ 
     //??? 
    } 
    if (test instanceof String){ 
     String s=(String)test; 
     return s==""; 
    } 
    if (test instanceof Collection){ 
     Collection c=(Collection)test; 
     return c.size()==0; 
    } 
    return false; 
} 

¿Qué código iba a poner int para establecer que si estoy tratando con una matriz que devolverá true si se trata de longitud es cero? Quiero que funcione sin importar el tipo si es int [], Object []. (Para que lo sepas, puedo decirte que si pones un int [] en una variable Object [], lanzará una excepción.)

Respuesta

9

Puede utilizar el método de ayuda getLength(Object) de java.reflect.Array:

public static boolean isEmpty(Object test){ 
    if (test==null){ 
     return true; 
    } 
    if (test.getClass().isArray()){ 
     return 0 == Array.getLength(test); 
    } 
    if (test instanceof String){ 
     String s=(String)test; 
     return s.isEmpty(); // Change this!! 
    } 
    if (test instanceof Collection){ 
     Collection c=(Collection)test; 
     return c.isEmpty(); 
    } 
    return false; 
} 

Tenga en cuenta que no se puede utilizar

boolean empty = (someString == ""); 

porque eso no es seguro. Para comparar cadenas, use String.equals(String), o en este caso, simplemente verifique si la longitud es cero.

8

Puedes usar java.lang.reflect.Array#getLength.

También tenga en cuenta que su prueba para String no funcionará como esperaba.

+0

Elaborar Apache, que podría reemplazar: retorno s == ""; Con return s.length()> 0; –

+0

No necesita reflexión, pero +1 para error de cadena. –

Cuestiones relacionadas