利用java反射机制比较同一个bean的两个对象的值是否相同
2016-04-21 15:18
495 查看
import java.lang.reflect.Field; import java.math.BigDecimal; public class CompareEntity { public static void main(String[] args) { Entity1 e1 = new Entity1(); e1.setName("名字"); e1.setAge(10); e1.setMoney(new BigDecimal("22222")); Entity1 e2 = new Entity1(); //e2.setName("名字"); e2.setAge(11); e2.setMoney(new BigDecimal("33333")); System.out.println("比较之前"); System.out.println("name:"+e1.getName()); System.out.println("age:"+e1.getAge()); System.out.println("money:"+e1.getMoney()); System.out.println("name:"+e2.getName()); System.out.println("age:"+e2.getAge()); System.out.println("money:"+e2.getMoney()); System.out.println("-------------------"); try { Compare.compare(e1, e2); } catch (Exception e) { e.printStackTrace(); } System.out.println("-----------------------"); System.out.println("比较之后"); System.out.println("name:"+e1.getName()); System.out.println("age:"+e1.getAge()); System.out.println("money:"+e1.getMoney()); System.out.println("name:"+e2.getName()); System.out.println("age:"+e2.getAge()); System.out.println("money:"+e2.getMoney()); } } class Compare{ public static void compare(Object src,Object target) throws Exception{ Class<?> srcClass = src.getClass(); Class<?> targetClass = target.getClass(); Field[] e1Field = srcClass.getDeclaredFields(); Field[] e2Field = targetClass.getDeclaredFields(); for(int i=0;i<e1Field.length;i++){ Field e1F = e1Field[i]; Object o1 = srcClass.getMethod(getMethodName(e1F.getName())).invoke(src); for(int j=0;j<e2Field.length;j++){ Field e2F = e2Field[j]; if(e1F.getName().equals(e2F.getName())){ Class<?> type1 = e1F.getType(); Class<?> type2 = e2F.getType(); if(!type1.equals(type2)){ throw new RuntimeException("两个类型不一致"); } Object o2 = targetClass.getMethod(getMethodName(e2F.getName())).invoke(target); if(o1 == null && o2 != null ){ srcClass.getMethod(setMethodName(e1F.getName()),type1).invoke(src, o2); } if(o1 != null && o2 == null){ targetClass.getMethod(setMethodName(e2F.getName()),type2).invoke(target,o1); } if(o1 != null && o2 != null & !o1.equals(o2)){ System.out.println(o1 +" 不等于 "+ o2); } } } } } private static String getMethodName(String fieldName){ return "get"+fieldName.substring(0, 1).toUpperCase()+fieldName.substring(1,fieldName.length()); } private static String setMethodName(String fieldName){ return "set"+fieldName.substring(0, 1).toUpperCase()+fieldName.substring(1,fieldName.length()); } } class Entity1{ private String name; private int age; private BigDecimal money; public BigDecimal getMoney() { return money; } public void setMoney(BigDecimal money) { this.money = money; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
相关文章推荐
- eclipse制作app入门教程
- Java中数据库连接池原理机制的详细讲解以及项目连接数据库采用JDBC常用的几种连接方式
- Spring 实现远程访问详解——webservice
- restTemplete webService in spring
- eclipse新建安卓项目低于4.0,去除v7依赖包的方法
- (java)关于List中对象实现Comparable接口的例子
- java 面向对象及编程理解
- springMVC 枚举传值问题
- [置顶] JAVA串口通讯程序
- 《Spring实战》学习笔记-第六章:web视图解析
- Eclipse下调试安卓程序
- 《Spring实战》学习笔记-第五章:构建Spring web应用
- JAVA数据类型
- ERROR: JAVA_HOME is set to an invalid directory. JAVA_HOME = "D:\tools\jdk\jdk1.8.0_73" Please set t
- java 日期格式化
- [改善Java代码]不要只替换一个类
- java对cookie的操作
- SpringMVC
- java注解(annotation)
- Java的4种代码块总结