场景:在通过Gson或者FastGson解析数据成功后,在使用一个对象的时候,比如在用户中心界面有几个属性,姓名,年龄,个人介绍,当我们在使用其中的一个属性的时候,如果这个属性刚好服务器没有赋值,读取的是一个null,有可能导致应用的崩溃或者是在界面显示一个null,那么此时的你是不是想有没有一种想,通过一种方法来一下子判断出里面的属性有没有一个是null的或者是空的,而不是当发现是null值的时候才会怒气冲冲的找到服务器开发人员,(友谊万岁 笑脸)。
好吧,是时候展示真正的实力了。
public class BeanUtils1 {
public static String checkFieldValueNull(Object bean) {
StringBuffer sb=new StringBuffer();
sb.append("");
if (bean == null) {
return sb.toString();
}
sb.append(bean.getClass().getName()+" 以下属性为空 ");
Class<?> cls = bean.getClass();
Method[] methods = cls.getDeclaredMethods();
Field[] fields = cls.getDeclaredFields();
for (Field field : fields) {
try {
String fieldGetName = parGetName(field.getName());
if (!checkGetMet(methods, fieldGetName)) {
continue;
}
Method fieldGetMet = cls.getMethod(fieldGetName, new Class[]{});
Object fieldVal = fieldGetMet.invoke(bean, new Object[]{});
if (fieldVal != null) {
if ("".equals(fieldVal)) {
sb.append(fieldGetMet.getName().toString()+",");
}
}else{
sb.append( fieldGetMet.getName().toString()+",");
}
} catch (Exception e) {
continue;
}
}
return sb.toString();
}
/**
* 拼接某属性的 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;
}
}
多做总结,提升自我,加油