java - 如何检查原始空数组

标签 java

我想创建一个方法来检查每个对象的值是否为空。如果输入对象为null,则返回 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。有人可以解释一下吗?

最佳答案

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

关于java - 如何检查原始空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40450076/

相关文章:

javaccspecialToken 的绝对偏移量

java - 过滤器列表等于参数

java - 如果以 .00 结尾,如何比较 double 的字符串表示

java - 如何在 Groovy 中模拟 String.equals?

java - Android, Mediaplayer mp3, 令人不安的声音

java - 方法和字段名称不应仅因大小写而不同(squid :S1845) false positive

java - 如何以每个用户都有一组属性的方式拆分点上的字符串?

java - CSS 和 JS 未加载 - net :ERR_ABORTED and 404() Java Spring Boot

java - mockito 不匹配任何(类型)方法

java - 如何使用 ImageReader.abort()?