2012-01-30 14 views
9

Proszę mi pomóc zakończyć moją metodę isEmpty:Biorąc pod uwagę, że obiekt jest tablicą dowolnego typu, w jaki sposób testujesz, czy jest on pusty w Javie?

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

Jaki kod Chciałbym umieścić int ustalić, że jeśli mam do czynienia z tablicą zwróci true, jeśli jest to długość wynosi zero? Chcę, żeby działało bez względu na typ, czy to int [], Object []. (Tak, jak wiesz, mogę ci powiedzieć, że jeśli wstawisz int [] do zmiennej Object [], wygeneruje ona wyjątek.)

Odpowiedz

9

Można użyć metody pomocnika getLength(Object) z 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; 
} 

Należy pamiętać, że nie można używać

boolean empty = (someString == ""); 

bo to nie jest bezpieczne. Aby porównać łańcuchy, użyj String.equals(String) lub w takim przypadku po prostu sprawdź, czy długość wynosi zero.

8

Możesz użyć java.lang.reflect.Array#getLength.

Należy również pamiętać, że Twój test na String nie będzie działał zgodnie z oczekiwaniami.

+0

Aby rozwinąć, można wymienić: powrócić s == „”; Z return s.length()> 0; –

+0

Nie potrzebujesz refleksji, ale +1 dla błędu ciągu. –

Powiązane problemy