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; }
上述方法运用了递归,当对象是数组时又调用自身.
测试:
@Test public void test_isNullOrEmpty(){ String input1=null; String input3=""; String input4=" "; String input5="a"; String input6=" "; String[] strs1 = new String[] { "a" }; String[] strs2 = new String[] { "", "" }; String[] strs3 = new String[] { "", "c" }; String[] strs4 = new String[] {}; org.junit.Assert.assertEquals(true, ValueWidget.isNullOrEmpty(input1)); org.junit.Assert.assertEquals(true, ValueWidget.isNullOrEmpty(input3)); org.junit.Assert.assertEquals(false, ValueWidget.isNullOrEmpty(input4)); org.junit.Assert.assertEquals(false, ValueWidget.isNullOrEmpty(input5)); org.junit.Assert.assertEquals(false, ValueWidget.isNullOrEmpty(input6)); org.junit.Assert.assertEquals(false, ValueWidget.isNullOrEmpty(strs1)); org.junit.Assert.assertEquals(true, ValueWidget.isNullOrEmpty(strs2)); org.junit.Assert.assertEquals(false, ValueWidget.isNullOrEmpty(strs3)); org.junit.Assert.assertEquals(true, ValueWidget.isNullOrEmpty(strs4)); }
那么如何判断一个自定义对象属性是否全为空呢?(这里只考虑对象的属性全为基本类型)?
代码如下:
/*** * 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 { 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; }ValueWidget.isNullOrEmpty 的类com.string.widget.util.ValueWidget.ValueWidget:见
http://download.csdn.net/detail/hw1287789687/7255307
测试:
package com.test.bean; 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; public int getId() { return id; } public void setId(int id) { this.id = id; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getPersonName() { return personName; } public void setPersonName(String personName) { this.personName = personName; } public Timestamp getBirthdate() { return birthdate; } public void setBirthdate(Timestamp birthdate) { this.birthdate = birthdate; } public String getIdentitify() { return identitify; } public void setIdentitify(String identitify) { this.identitify = identitify; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public double getWeight() { return weight; } public void setWeight(double weight) { this.weight = weight; } } @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)); }参考:http://hw1287789687.iteye.com/blog/1936364
项目代码下载地址:
http://download.csdn.net/detail/hw1287789687/7255307
.