如何检查原始空数组

时间:2016-11-06 13:51:52

标签: java

我想创建一个方法来检查每个Object的值是否为空。如果输入对象是null,那么return true;。如果输入是数组类型,请检查它的长度。下面是我实现此逻辑的方法

public static boolean isEmpty(Object input) {
    if (input == null) {
        return true;
    }
        if (input instanceof Collection) {
        if (((Collection<?>) input).size() == 0) {
            return true;
        }
    }
    if (input instanceof String) {
        if (((String) input).trim().length() == 0) {
            return true;
        }
    }
    if (input instanceof Object[]) {
        if (((Object[]) input).length == 0) {
            return true;
        }
    }
    return false;
}

但问题是我在测试时就像这样

int[] a = {};
float[] b = {};
Integer[] c = {};
Float[] d = {};
System.out.println(Validator.isEmpty(a));
System.out.println(Validator.isEmpty(b));
System.out.println(Validator.isEmpty(c));
System.out.println(Validator.isEmpty(d));

我不知道为什么abfalse。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:5)

float[]不是instanceof Object[]。如果要检查所有类型的数组,可能需要从对象中获取类并检查其isArray方法。然后,您可以使用Array.getLength来获取其长度(因为,奇怪的是,您无法使用Class#getField来获取length字段:

import java.lang.reflect.*;

class Validator {
    public static void main(String args[]) throws Exception {
        int[] a = {};
        float[] b = {};
        Integer[] c = {};
        Float[] d = {};
        System.out.println(Validator.isEmpty(a));            // true
        System.out.println(Validator.isEmpty(b));            // true
        System.out.println(Validator.isEmpty(c));            // true
        System.out.println(Validator.isEmpty(d));            // true
        System.out.println(Validator.isEmpty(new float[3])); // false (just double-checking)
    }

    public static boolean isEmpty(Object input) {
        if (input == null) {
            return true;
        }
        if (input instanceof String) {
            if (((String) input).trim().length() == 0) {
                return true;
            }
        }
        if (input.getClass().isArray()) {
            return Array.getLength(input) == 0;
        }
        return false;
    }
}