2012-01-30 56 views
9

Xin hãy giúp tôi hoàn thành phương pháp isEmpty tôi:Cho rằng một đối tượng là một mảng của bất kỳ loại nào làm thế nào để bạn kiểm tra rằng nó có sản phẩm nào trong 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; 
} 

đang Những gì tôi sẽ đặt int để thiết lập rằng nếu tôi đang đối phó với một mảng nó sẽ trở lại đúng nếu đó là chiều dài được không? Tôi muốn nó hoạt động bất kể loại nào là int [], Object []. (Chỉ cần bạn biết, tôi có thể cho bạn biết rằng nếu bạn đặt một [] vào một biến Object [], nó sẽ ném một ngoại lệ.)

Trả lời

9

Bạn có thể sử dụng phương thức helper getLength(Object) từ 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; 
} 

Lưu ý rằng bạn không thể sử dụng

boolean empty = (someString == ""); 

vì đó không phải là an toàn. Để so sánh các chuỗi, hãy sử dụng String.equals(String) hoặc trong trường hợp này, chỉ cần kiểm tra xem độ dài có bằng không hay không.

8

Bạn có thể sử dụng java.lang.reflect.Array#getLength.

Cũng lưu ý rằng thử nghiệm của bạn cho String sẽ không hoạt động như bạn mong đợi.

+0

Để xây dựng, bạn có thể thay thế: trở s == ""; Với trả về s.length()> 0; –

+0

Không cần phản chiếu nhưng +1 đối với lỗi Chuỗi. –

1

Một lựa chọn thứ ba được xây dựng ở một số kiểm tra null là Apache ArrayUtils

Các vấn đề liên quan