java判断注解是否相等_Java中对⽐两个对象中属性值[反射、
注解]
在Java中通常要⽐较两个对象在修改前与修改后的值是否相同,⼀般我们采⽤的是反射技术获取对象的get⽅法[或其他的⽅法]获取值并做⽐较。如果系统将修改的属性名称也显⽰出来,这样就能更直观的显⽰类中的哪⼀个属性的值被修改了。然后Java中只能获取属性的名称,也就是英⽂标识的属性名,但是⼀般我们都会在属性后⾯添加属性的注释,但是Java不提供注释获取的⽅法。所以我们只能使⽤另外⼀种⽅式来将属性和属性注释关联起来,这就是Java中的@Annotation。
public static Map> compile(Object db,
Object new_) {
Map> map = new HashMap>();//存放修改前与修改后的属性值
Class cDb = (Class) db.getClass();
Field[] filesDb = DeclaredFields();
Class cNew_ = (Class) new_.getClass();
Map valDbMap = new HashMap();//存放修改前的已修改的值
Map valNewMap = new HashMap();//存放修改后的值
for (Field field : filesDb) {
String getMethodName = "get"
+ Name().substring(0, 1).toUpperCase()
+ Name().substring(1);
try {
Method mdb = (Method) Method(getMethodName);
Method mNew_ = (Method) cNew_.getMethod(getMethodName);
//⾃定义实现的注解类
Annotation meta = Annotation(Annotation.class);
try {
js合并两个数组if(meta!= null){
Object valDb = mdb.invoke(db);
Object valNew = 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 (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
} catch (NoSuchMethodException e) {
log.debug("没有这个⽅法可显⽰调⽤");
} catch (SecurityException e) {
e.printStackTrace();
}
}
map.put("更改前", valDbMap);
map.put("更改后", valNewMap);
return map;
}
后⾯提供注解类,这⾥⽐较简单,其实不想写的,但是为了⽅便需要的⼈还是提供⾃定义的注解类:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Annotation {
public String annotation();
}
注解类的定义这块我就不说了。怎么使⽤呢,在我们需要⽐较的类的⽅法上⾯添加@Annotation(annotation="注释")
使⽤java中的反射获得object对象的属性值
知识点:使⽤java中的反射获得object对象的属性值 ⼀:场景 这两天开发代码时,调⽤别⼈的后台接⼝,返回值为Object对象(json形式的),我想获得object中指定的属性值,没有对应的ge ...
Java对⽐两个数据库中的表和字段,写个冷门的东西
Java对⽐两个数据库中的表和字段,写个冷门的东西 转载的 来源⽹络 ⽬前所在的项⽬组距离下个版本上线已经很近了,就⾯临了⼀个问题:开发⼈员在开发库上根据需要增加数据表.数据字段.或者变更了字段类型或 ...
java⼯具类之按对象中某属性排序
import flect.Field; import flect.InvocationTargetException; import java.lang ...
【java】【反射】反射实现判断发⽣了修改操作,判断两个对象是否发⽣属性值的变更,判断两个List集合内对象的属性值是否发⽣变更
java的反射实现: 判断发⽣了修改操作,判断两个对象是否发⽣属性值的变更,判断两个List集合内对象的属性值是否发⽣变更 今⽇份代码: package com.sxd.streamTest; imp ...
C#⽐较两个对象中的指定字段值是否相等
⼀.创建CompareFieldAttribute标识要⽐较的字段 using System; namespace CompareObjField { /// /// ...
java 算法之 两个字符串中最⼤相同的⼦串
public class String_intern { public static void main(String[] args) { String old="aaaaabc1" ...
Js数组对象的属性值升序排序,并指定数组中的某个对象移动到数组的最前⾯
需求整理: 本篇⽂章主要实现的是将⼀个数组的中对象的属性值通过升序的⽅式排序,然后能够让程序可以指定对应的数组对象移动到程序的最前⾯. 数组如下所⽰: var arrayData= [{name: & ...
Objective-C中变量采⽤@property的各个属性值的含义
我们在OC中定义变量,可以⾃⼰来定义变量的setter⽅法来设置变量值,⽤getter⽅法来获取变量值.但是当变量数量增多时,还采⽤⼿动添加setter/getter⽅法来操作变量,就会使得程序代码量 ...
随机推荐
(五)Maven⽬录结构及常⽤命令说明
前⾯提到的部分知识有涉及到Maven⽬录结构与Maven常⽤的⼀些命令,在这⾥专门给⼤家做个简单的介绍. 1.Maven⽬录结构说明 Maven 总体⽬录结构如下图: bin⽬录:该⽬录包含了mvn运⾏ ...
Outlook不能预览和打开Excel⽂件:
⽆法打开Outlook邮箱中的Excel附件,确实让⼈恼⽕ 先不要着急: 1.在开始->运⾏,输⼊"regedit" 2.到路径:HKEY_CURRENT_USER\Sof ...
捉⾍记:SHGetSpecialFolderPath返回错误码为2
通常我们想获得系统的⼀些路径时,都会使⽤⼀些Shell函数.⽐如SHGetSpecialFolderPath,SHGetFolderPath,SHGetKnownFolderPath 等,传⼊我们想要的 ...
linux 内存管理——内核的shmall 和shmmax 参数
内核的 shmall 和 shmmax 参数 SHMMAX= 配置了最⼤的内存segment的⼤⼩ ------>这个设置的⽐SGA_MAX_SIZE⼤⽐较好. SHMMIN= 最⼩的内存seg ...
selenium+BeautifulSoup+phantomjs爬取新浪新闻
⼀ 下载phantomjs,把的⽂件路径加到环境变量中,也可以拷贝到⼀个已存在的环境变量路径中,⽐如我⽤的anaconda,我把phantomjs. ...
TCP连接建⽴系列 — TCP选项解析
本⽂主要分析:在收到客户端的SYN包时,服务器端是如何解析它所携带的TCP选项,并结合本端情况决定是否予以⽀持. 内核版本:3.6 Author:zhangskd @ csdn blog 概述 收到客 ...
Linux中通过Socket⽂件描述符寻连接状态介绍
针对下⽂的总结:socket是⼀种⽂件描述符 进程的打开⽂件描述符表 Linux的三个系统调⽤:open,socket,pipe 返回的都是⼀个描述符.不同的进程中,他们返回的描述符可以相同.那么,在 ...
Eureka (数学组合 + 斜率)
由于斜率的储存精度不够,所以使⽤最简分数表⽰记录. 合并同⼀个位置上的点,然后统计个数,利⽤公式先求出⾄少包含2个点的数量. 然后再是求某位之上的点与某⼀斜率的个数,那就是每边⾄少⼀个点的个数相乘. ...
commons-pool 解析
⾸先抛出个常见的长连接问题: 1 都知道连接MySQL的应⽤中⼤多会使⽤框架例如 c3p0 ,dbcp proxool 等来管理数据库连接池. 数据库连接池毫⽆疑问都是采⽤长连接⽅式. 那么MySQ ...
python的笔记
np.argsort(x):返回数据x从⼩到⼤的索引值,记住是⼀个索引值.当你想获取从⼩到⼤的数据的时候,⽤到这个 data[::-1]:对数据data进⾏倒转a=[0,1,2,3,4,5] a[: ...
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论