我想创建一个方法来检查每个对象的值是否为空。如果输入对象为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));
我不知道为什么a
和b
是false
。有人可以解释一下吗?
最佳答案
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/