我想创建一个方法来检查每个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));
我不知道为什么a
和b
是false
。有人可以解释一下吗?
答案 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;
}
}