鉴于Object是一个任何类型的数组,你如何测试它在Java中是空的?

时间:2012-01-30 17:47:09

标签: java arrays types

请帮我完成我的isEmpty方法:

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

我将int放入什么代码来确定如果我处理数组,如果它的长度为零,它将返回true?无论类型是int [],Object [],我希望它能工作。 (大家知道,我可以告诉你,如果你把一个int []放到一个Object []变量中,它会抛出异常。)

3 个答案:

答案 0 :(得分:9)

您可以使用java.reflect.Array中的辅助方法getLength(Object)

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

请注意,您无法使用

boolean empty = (someString == "");

因为那不安全。要比较字符串,请使用String.equals(String),或者在这种情况下,只需检查长度是否为零。

答案 1 :(得分:8)

您可以使用java.lang.reflect.Array#getLength

另请注意,String的测试无法按预期运行。

答案 2 :(得分:1)

在一些空检查中构建的第三个选项是Apache的ArrayUtils