如何检查原始空数组

大灾变

我想创建一个方法,该方法检查每一个对象的值是empty.If输入对象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有人可以向我解释吗?

TJ人群

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章