java 如何优雅给对象属性判空(反射判空)

本文介绍了IsNullObject.java中的静态方法checkObjFieldIsNull,用于检查对象中指定字段是否为null。通过实例演示了如何使用这个工具并展示了objToBoolean方法,用于将对象转换为布尔值,仅针对给定的属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**  
 * @Title: IsNullObject.java
 * @Package: com.jk.core.utils
 * @Description: TODO
 * @author: 爱上深呼吸 
 * @date: 2020年11月14日 下午2:08:09
 * @version: V1.0
 */
package com.jk.core.utils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @ClassName: IsNullObject
 * @Description: TODO
 * @author: 爱上深呼吸
 * @date: 2020年11月14日 下午2:08:09
 */
public class IsNullObject {
	static class Person {
		
		 //姓名
	    private String name;
	    //性别
	    private String sex;
	    
	    public String getName() {
	        return name;
	    }

	    public void setName(String name) {
	        this.name = name;
	    }

	    public String getSex() {
	        return sex;
	    }

	    public void setSex(String sex) {
	        this.sex = sex;
	    }

	    @Override
	    public String toString() {
	        return "Person{" +
	                "name='" + name + '\'' +
	                ", sex='" + sex + '\'' +
	                '}';
	    }

	}
	static class Student extends Person {
		
		 //学号
	    private String snum;
	    // 学院
	    private String scoll;
	    // 班级
	    private String sclass;
	    
	    public String getSnum() {
	        return snum;
	    }

	    public void setSnum(String snum) {
	        this.snum = snum;
	    }

	    public String getScoll() {
	        return scoll;
	    }

	    public void setScoll(String scoll) {
	        this.scoll = scoll;
	    }

	    public String getSclass() {
	        return sclass;
	    }

	    public void setSclass(String sclass) {
	        this.sclass = sclass;
	    }

	    @Override
	    public String toString() {
	        return "student{" +
	                "snum='" + snum + '\'' +
	                ", scoll='" + scoll + '\'' +
	                ", sclass='" + sclass + '\'' +
	                '}';
	    }
	    
	}
	
	public static boolean checkObjFieldIsNull(Object obj) throws IllegalAccessException {
	    boolean flag = false;
	    for(Field f : obj.getClass().getDeclaredFields()){
	        f.setAccessible(true);
	        if(f.get(obj) == null){
	            flag = true;
	            return flag;
	        }
	    }
	    return flag;
	}
	
	    
	
	//将对象转成Boolean
	public static Boolean objToBoolean(Object obj,String [] arr) {
        Map<String, Object> map = new HashMap<String, Object>();
        // 获取f对象对应类中的所有属性域
        Field[] fields = getAllFields(obj);
        for (int i = 0, len = fields.length; i < len; i++) {
        	boolean flag =false;
            String varName = fields[i].getName();
            if(arr != null) {
            	for(int j = 0; j < arr.length;j++){
                    if(varName.equals(arr[j])||varName==arr[j]) {//放行字段
                    	flag=true;
                    	break;
                    }
                }
            }
            if(flag) {
            	continue;
            }
            varName = varName.toLowerCase();//将key置为小写,默认为对象的属性
            try {
                // 获取原来的访问控制权限
                boolean accessFlag = fields[i].isAccessible();
                // 修改访问控制权限
                fields[i].setAccessible(true);
                // 获取在对象f中属性fields[i]对应的对象中的变量
                Object o = fields[i].get(obj);
                if (o != null) {
                	map.put(varName, o.toString());
                }else {
                	// System.out.println("传入的对象中包含一个如下的变量:" + varName + " = " + o);
                	// 恢复访问控制权限
                	fields[i].setAccessible(accessFlag);
                	 return true;
                }
            } catch (IllegalArgumentException ex) {
                ex.printStackTrace();
            } catch (IllegalAccessException ex) {
                ex.printStackTrace();
            }
        }
        return false;
    }
    
    /**
     * 返回对象的Field(包括私有的和父类的)
     */
    public static Field[] getAllFields(Object object) {
        Class clazz = object.getClass();
        List<Field> fieldList = new ArrayList<>();
        while (clazz != null) {
            fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));
            clazz = clazz.getSuperclass();
        }
        Field[] fields = new Field[fieldList.size()];
        fieldList.toArray(fields);
        return fields;
    }
    
    public static void main(String[] args) {
    	Student student = new Student();
        student.setName("这是姓名");//父类中的属性
        //student.setSnum("这是学号");
        //student.setSclass("AA");
        student.setSex("111");
        student.setScoll("222");
        String []  arr = {"snum","sclass"};
        System.out.println(objToBoolean(student,arr));
        
        System.out.println(objToBoolean(student,null));
        
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值