失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Java中对比两个对象中属性值[反射 注解]

Java中对比两个对象中属性值[反射 注解]

时间:2019-11-15 10:02:28

相关推荐

Java中对比两个对象中属性值[反射 注解]

在Java中通常要比较两个对象在修改前与修改后的值是否相同,一般我们采用的是反射技术获取对象的get方法[或其他的方法]获取值并做比较。如果系统将修改的属性名称也显示出来,这样就能更直观的显示类中的哪一个属性的值被修改了。然后Java中只能获取属性的名称,也就是英文标识的属性名,但是一般我们都会在属性后面添加属性的注释,但是Java不提供注释获取的方法。所以我们只能使用另外一种方式来将属性和属性注释关联起来,这就是Java中的@Annotation。

publicstaticMap<String,Map<String,String>>compile(Objectdb, Objectnew_){ Map<String,Map<String,String>>map=newHashMap<String,Map<String,String>>();//存放修改前与修改后的属性值 Class<Object>cDb=(Class<Object>)db.getClass(); Field[]filesDb=cDb.getDeclaredFields(); Class<Object>cNew_=(Class<Object>)new_.getClass(); Map<String,String>valDbMap=newHashMap<String,String>();//存放修改前的已修改的值 Map<String,String>valNewMap=newHashMap<String,String>();//存放修改后的值 for(Fieldfield:filesDb){ StringgetMethodName="get" +field.getName().substring(0,1).toUpperCase() +field.getName().substring(1); try{ Methodmdb=(Method)cDb.getMethod(getMethodName); MethodmNew_=(Method)cNew_.getMethod(getMethodName); //自定义实现的注解类 Annotationmeta=mdb.getAnnotation(Annotation.class); try{ if(meta!=null){ ObjectvalDb=mdb.invoke(db); ObjectvalNew=mNew_.invoke(new_); if(valDb!=null){ if(!valDb.equals(valNew)){ valDbMap.put(meta.annotation(),String.valueOf(valDb)); valNewMap.put(meta.annotation(),String.valueOf(valNew)); } } } }catch(IllegalAccessExceptione){ e.printStackTrace(); }catch(IllegalArgumentExceptione){ e.printStackTrace(); }catch(InvocationTargetExceptione){ e.printStackTrace(); } }catch(NoSuchMethodExceptione){ log.debug("没有这个方法可显示调用"); }catch(SecurityExceptione){ e.printStackTrace(); } } map.put("更改前",valDbMap); map.put("更改后",valNewMap); returnmap; }

后面提供注解类,这里比较简单,其实不想写的,但是为了方便需要的人还是提供自定义的注解类:

@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public@interfaceAnnotation{publicStringannotation();}

注解类的定义这块我就不说了。怎么使用呢,在我们需要比较的类的方法上面添加@Annotation(annotation="注释")

如果觉得《Java中对比两个对象中属性值[反射 注解]》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。