Java 中如何判断一个未知对象是否为空呢?
下面是一个通用的方法,判断字符串是否为空,集合是否为空,数组是否为空:
- /**
- * 判断对象或对象数组中每一个对象是否为空: 对象为null,字符序列长度为0,集合类、Map为empty
- *
- * @param obj
- * @return
- */
- public static boolean isNullOrEmpty(Object obj) {
- if (obj == null)
- return true;
- if (obj instanceof CharSequence)
- return ((CharSequence) obj).length() == 0;
- if (obj instanceof Collection)
- return ((Collection) obj).isEmpty();
- if (obj instanceof Map)
- return ((Map) obj).isEmpty();
- if (obj instanceof Object[]) {
- Object[] object = (Object[]) obj;
- if (object.length == 0) {
- return true;
- }
- boolean empty = true;
- for (int i = 0; i < object.length; i++) {
- if (!isNullOrEmpty(object[i])) {
- empty = false;
- break;
- }
- }
- return empty;
- }
- return false;
- }
参考:org.apache.commons.lang.StringUtils
应用场景:
读取excel文件,转化为一个二维数组:Object[][] arrays
但是excel中有空行,所以需要过滤Object[][] arrays中的空的一维数组:
- /***
- * 过滤数组中的空元素
- *
- *
- * @param arrays
- * @return
- */
- public static Object[][] filterEmpty(Object[][] arrays) {
- int sumNotNull = 0;
- /***
- * 统计非空元素的总个数
- */
- for (int i = 0; i < arrays.length; i++) {
- Object object = arrays[i];
- if (!ValueWidget.isNullOrEmpty(object)
- && !SystemUtil.isNullOrEmpty((Object[]) object)) {// 判断元素是否为空
- sumNotNull = sumNotNull + 1;
- }
- }
- Object[][] filtedObjs = new Object[sumNotNull][];
- int index = 0;
- for (int i = 0; i < arrays.length; i++) {
- Object[] object_tmp = arrays[i];
- if (!ValueWidget.isNullOrEmpty(object_tmp)
- && !SystemUtil.isNullOrEmpty((Object[]) object_tmp)) {// 判断元素是否为空
- filtedObjs[index++] = object_tmp;
- }
- }
- return filtedObjs;
- }
参阅附件中的方法com.common.util.SystemUtil.filterEmpty
判断对象的所有成员变量是否为空
- /***
- * Determine whether the object's fields are empty
- *
- * @param obj
- * @param isExcludeZero :true:数值类型的值为0,则当做为空;----false:数值类型的值为0,则不为空
- *
- * @return
- * @throws SecurityException
- * @throws IllegalArgumentException
- * @throws NoSuchFieldException
- * @throws IllegalAccessException
- */
- public static boolean isNullObject(Object obj, boolean isExcludeZero)
- throws SecurityException, IllegalArgumentException,
- NoSuchFieldException, IllegalAccessException {
- if(ValueWidget.isNullOrEmpty(obj)){//对象本身就为null
- return true;
- }
- List<Field> fieldList = ReflectHWUtils.getAllFieldList(obj.getClass());
- boolean isNull = true;
- for (int i = 0; i < fieldList.size(); i++) {
- Field f = fieldList.get(i);
- Object propertyValue = null;
- try {
- propertyValue = getObjectValue(obj, f);
- } catch (NoSuchFieldException e) {
- e.printStackTrace();
- }
- if (!ValueWidget.isNullOrEmpty(propertyValue)) {// 字段不为空
- if (propertyValue instanceof Integer) {// 是数字
- if (!((Integer) propertyValue == 0 && isExcludeZero)) {
- isNull = false;
- break;
- }
- } else if (propertyValue instanceof Double) {// 是数字
- if (!((Double) propertyValue == 0 && isExcludeZero)) {
- isNull = false;
- break;
- }
- }else if (propertyValue instanceof Float) {// 是数字
- if (!((Float) propertyValue == 0 && isExcludeZero)) {
- isNull = false;
- break;
- }
- }else if (propertyValue instanceof Short) {// 是数字
- if (!((Short) propertyValue == 0 && isExcludeZero)) {
- isNull = false;
- break;
- }
- }else {
- isNull = false;
- break;
- }
- }
- }
- return isNull;
- }
测试:
- @Test
- public void test_isNullObject() throws SecurityException,
- IllegalArgumentException, NoSuchFieldException,
- IllegalAccessException {
- Person2 p = new Person2();
- Assert.assertEquals(true, ReflectHWUtils.isNullObject(p, true));
- Assert.assertEquals(false, ReflectHWUtils.isNullObject(p, false));
- p.setAddress("beijing");
- Assert.assertEquals(false, ReflectHWUtils.isNullObject(p, true));
- Assert.assertEquals(false, ReflectHWUtils.isNullObject(p, false));
- p.setAddress(null);
- p.setId(0);
- Assert.assertEquals(true, ReflectHWUtils.isNullObject(p, true));
- Assert.assertEquals(false, ReflectHWUtils.isNullObject(p, false));
- }
Person2 源代码(省略getter,setter方法):
- import java.sql.Timestamp;
- public class Person2 {
- private int id;
- private int age;
- private double weight;
- private String personName;
- private Timestamp birthdate;
- public String identitify;
- protected String address;
- String phone;
- }