Java代码如何判断实体类属性是否为空呢?
下文是笔者编写的一个实体工具类--用于检测实体类属性是否为空的方法,如下所示
实现思路: 使用反射获取字段值 然后对其值进行检测 判断其是否为空例:
import org.apache.commons.lang.StringUtils; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * 判断对象是否为空 * @param obj * @return */ public static Boolean isNotEmptyBean(Object obj) { Boolean flag = false; try { if (null != obj){ //得到类对象 Class<?> c = (Class<?>) obj.getClass(); //得到属性集合 Field[] fs = c.getDeclaredFields(); //得到方法体集合 Method[] methods = c.getDeclaredMethods(); //遍历属性 for (Field f : fs) { //设置属性是可以访问的(私有的也可以) f.setAccessible(true); String fieldGetName = parGetName(f.getName()); //判断属性是否存在get方法 if (!checkGetMet(methods, fieldGetName)) { continue; } //得到此属性的值 Object val = f.get(obj); //只要有1个属性不为空,那么就不是所有的属性值都为空 if (isNotEmpty(val)) { flag = true; break; } } } } catch (Exception e) { log.error("判断对象是否为空出错:" + e.getMessage()); } return flag; } /** * 拼接某属性的 get方法 * @param fieldName * @return String */ public static String parGetName(String fieldName) { if (null == fieldName || "".equals(fieldName)) { return null; } int startIndex = 0; if (fieldName.charAt(0) == '_') startIndex = 1; return "get" + fieldName.substring(startIndex, startIndex + 1).toUpperCase() + fieldName.substring(startIndex + 1); } /** * 判断是否存在某属性的 get方法 * @param methods * @param fieldGetMet * @return boolean */ public static Boolean checkGetMet(Method[] methods, String fieldGetMet) { for (Method met : methods) { if (fieldGetMet.equals(met.getName())) { return true; } } return false; }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。