博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
即使对象内容都为空,对象本身也是非空的
阅读量:6913 次
发布时间:2019-06-27

本文共 2418 字,大约阅读时间需要 8 分钟。

hot3.png

public class TestClass {public static void main(String[] args) {	user user = new TestClass().new user();	user.setName(null);	user.setPassword(null);	System.out.println(user == null);}class user {	private String name;	private String password;	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public String getPassword() {		return password;	}	public void setPassword(String password) {		this.password = password;	}	}}

180610_8SF5_2885163.png

如果有需求需要判断对象内容为空,对象为空。可以写一个工具类

这个工具类还包括比较两个对象内属性,相同置为null,不同置为新对象的值。并返回比较后新生成的对象

import java.lang.reflect.Field;import java.util.HashMap;import java.util.Map;public class ClassUtils {	@SuppressWarnings("unchecked")	public static 
T getDiffObject(T t1, T t2) { Map
map = getDiffField(t1, t2); T result = null; try { if(map != null && map.size() > 0) { Class
clazz = Class.forName(t1.getClass().getName()); result = (T) clazz.newInstance(); for(Map.Entry
me : map.entrySet()) { Field field = clazz.getDeclaredField(me.getKey()); field.setAccessible(true); field.set(result, me.getValue()); } } } catch (Exception e) { e.printStackTrace(); } return result; } public static
Map
getDiffField(T t1, T t2) { Map
resultMap = new HashMap
(); Class
clazz1 = t1.getClass(); Class
clazz2 = t2.getClass(); Field[] fields1 = clazz1.getDeclaredFields(); Field[] fields2 = clazz2.getDeclaredFields(); for(int i = 0; i < fields1.length; i++) { try { fields1[i].setAccessible(true); fields2[i].setAccessible(true); Object obj1 = fields1[i].get(t1); Object obj2 = fields2[i].get(t2); if((obj1 != null && !obj1.equals(obj2)) || (obj2 != null && !obj2.equals(obj1))) { resultMap.put(fields2[i].getName(), obj2); } } catch (IllegalArgumentException | IllegalAccessException e) { e.printStackTrace(); } } return resultMap; } public static boolean isNull(Object obj) { boolean result = true; if(obj != null) { Class
clazz = obj.getClass(); Field[] fields = clazz.getDeclaredFields(); if(fields != null && fields.length > 0) { for(Field field : fields) { try { field.setAccessible(true); Object value = field.get(obj); if(value != null) { result = false; break; } } catch (IllegalArgumentException | IllegalAccessException e) { e.printStackTrace(); } } } } return result; }}

 

转载于:https://my.oschina.net/zjllovecode/blog/1620352

你可能感兴趣的文章
Mysql系列:高可用(HA)
查看>>
Swift的基本使用介绍
查看>>
我的友情链接
查看>>
[置顶] Mybatis技术(四) 从配置读取到打开连接的源码分析
查看>>
约定 大于 验证
查看>>
mysql杀掉睡眠进程
查看>>
迈向高薪的阶梯
查看>>
用GDB调试程序(四)
查看>>
专用链表VS通用链表
查看>>
完美解决delphi7 安装Ehlib4.1.4报错的办法
查看>>
Mac常用快捷键
查看>>
python打包成exe程序
查看>>
Q查询
查看>>
【问题求助】PS调色师要学的东西!
查看>>
AB ABB ABC “ABCDEFG”
查看>>
sleep(),wait()区别
查看>>
自动日志清理脚本程序
查看>>
Block Object
查看>>
[转载] C#——使用RichTextBox做的一个Notepad
查看>>
c语言练习
查看>>