`

java 判断对象是否为空

阅读更多

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

 

2
5
分享到:
评论
2 楼 hw1287789687 2013-09-04  
JetMah 写道
if (obj instanceof Object[])
这一行判读数组的时候可以这样写:

if(obj.getClass().isArray()) {
  return Array.getLength(obj) == 0;
}

多谢指点
1 楼 JetMah 2013-09-04  
if (obj instanceof Object[])
这一行判读数组的时候可以这样写:

if(obj.getClass().isArray()) {
  return Array.getLength(obj) == 0;
}

相关推荐

    java判断对象是否为空

    java判断对象是否为空

    java 对象是否为空的判断

    java 判断对象是否为空.如String,Character,Object[]

    Java判断对象是否为空(包括null ,"")的方法

    在Java编程中,判断对象是否为空是一个常见的任务,特别是在处理数据和验证输入时。这篇文章将深入探讨如何在Java中检查对象是否为`null`或空字符串,并提供一个实用的工具类示例,帮助开发者实现这一功能。 首先,...

    java判断参数是否为空工具类 java判断对象属性是否全部为空

    java判空工具类 可以判断字符串数组,字符串类型,List对象集合,Map集合map,object&gt;,map和多个String参数,对象类型,是否为...java判断对象属性是否全部为空,只要有一个属性不为空,那么就不是所有的属性值都为空。

    Java中判断对象是否为空的方法的详解

    Java中判断对象是否为空的方法的详解 在 Java 中,判断对象是否为空是非常重要的操作。下面是 Java 中判断对象是否为空的方法的详解。 使用 StringUtils 判断对象是否为空 在 Java 中,有两个常用的 StringUtils ...

    Java如何优雅地判断对象是否为空

    在Java编程中,判断对象是否为空是一个至关重要的实践,它能有效地防止NullPointerException异常的发生,确保程序的健壮性。在本文中,我们将深入探讨几种优雅地判断对象为空的方法,包括基本对象、集合类如List、...

    JAVA日期判断方法小结

    判断某年是否为润年是日期判断的基本方法之一。该方法可以使用以下代码实现: ```java public static boolean isLeapYear(int year) { return (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)); } ...

    java 判断list是否为空过程解析

    在Java编程中,判断列表(List)是否为空是常见的操作,特别是在处理数据集合时。这里我们将深入探讨如何正确地检查List是否为空,并分析不同判断方式的差异。 首先,我们要理解`list != null`这个条件判断。这个...

    JAVA对象以及数据的工具类

    在处理Map时,MapUtils类(如在Apache Commons Collections中)提供了创建预定义大小的Map,或者检查Map是否为空等便捷功能。 对于日期和时间的操作,Java 8引入了新的日期/时间API,包括LocalDate、LocalTime、...

    EmptyUtils.java

    EmptyUtils.java---Java验证对象是否为空的工具类,工具可判断List,String,Integer,Object,Object[]类型的对象是否为空。

    java判断是否空最简单的方法

    Java 判断是否空的方法 在 Java 编程中,判断一个对象、字符串、数组或集合是否为空是非常重要的。...Java 中判断是否空的方法有多种,我们可以根据实际情况选择合适的方法来判断对象、字符串、数组或集合是否为空。

    java BigDecimal操作

    在进行大量计算时,为了性能考虑,可以使用`BigDecimal.valueOf()`静态工厂方法,它会复用已存在的BigDecimal实例,避免重复创建对象。 `MathContext`是另一个重要的概念,它定义了计算的精度和舍入模式。例如,`...

    Jsp中判断文本框是否为空

    本文将详细介绍如何在JSP(JavaServer Pages)页面中通过JavaScript来判断文本框是否为空,并提供具体的实现代码示例。 #### 一、问题背景 在进行用户登录或注册等操作时,通常需要收集用户的某些信息,如用户名、...

    freemarker判断对象是否为空的方法

    如果需要判断对象是否为空: &lt;#if name??&gt; …… &lt;/#if&gt; 当然也可以通过设置默认值${name!”}来避免对象为空的错误。如果name为空,就以默认值(“!”后的字符)显示。  对象user,name为user的属性的...

    Java中String判断值为null或空及地址是否相等的问题

    本文主要讨论了如何正确判断Java中的String对象是否为null、空值("")以及它们的地址是否相等。在处理字符串时,了解这些概念对于避免程序出错至关重要。 首先,我们需要区分`null`和空字符串`""`。`null`表示变量...

    java判断字符串String是否为空问题浅析

    在Java编程语言中,判断字符串`String`是否为空是一个常见的需求。这通常涉及到对字符串对象的检查,确保它们既不是`null`也不是空字符串。在本文中,我们将深入探讨几种不同的方法来完成这个任务,并分析它们的效率...

    java 导入及判断的Excel 使用方法

    本文将深入探讨Java中导入和判断Excel的使用方法,结合实例分析,帮助你全面理解这一技术。 首先,Java与Excel的交互通常依赖于第三方库,如Apache POI或JExcelAPI。Apache POI是目前最常用的一个,它提供了丰富的...

    Java 实例 - 判断目录是否为空源代码-详细教程.zip

    在Java编程中,判断目录是否为空是一个常见的任务,特别是在处理文件系统操作时。这个实例教程将深入探讨如何通过Java API来实现这一功能。在本文中,我们将详细讲解相关的Java知识,包括文件和目录操作,以及如何...

Global site tag (gtag.js) - Google Analytics