`

请您先登录,才能继续操作

利用反射比较同一个对象的两个实例的具体值的异同

 
阅读更多

/**

 * 比较同一个类的两个对象示例的不一样的内容,并输出不一样的字段内容

 * <br/> 属性字段为基本数据类型

 * 

 * @author FALSE KING create

 * @date 2016年9月23日 下午4:36:38

 */

public class ModelComparator<T> {

 

/**

* 比较内容,输出不一样的字段内容<br/>

* 属性字段为基本数据类型

* @param oldModel  修改前的对象

* @param newModel 修改后的对象

* @param exceptFileds 排除的属性字段列表

* @return

*/

public String compare(T oldModel,T newModel,List<String> exceptFileds) {

List<String> result = new ArrayList();

 

Field[] oldFields = oldModel.getClass().getDeclaredFields();

for (Field f : oldFields) {

String name = f.getName();

if(CollectionUtils.isNotEmpty(exceptFileds) && exceptFileds.contains(name)){

continue;

}

String methodName = "get" + name.substring(0, 1).toUpperCase() + 

name.substring(1);

try {

Object oldVal = oldModel.getClass().getMethod(methodName).invoke(oldModel);

Object newVal = newModel.getClass().getMethod(methodName).invoke(newModel);

if(oldVal != null && !oldVal.equals(newVal)){

 

result.add(String.valueOf(oldVal) + "修改为" +String.valueOf(newVal)+ "\n") ;

}

} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException

| NoSuchMethodException | SecurityException e) {

}

}

String str = "";

if(CollectionUtils.isNotEmpty(result)){

str = result.stream().reduce((sum,e)->sum += e).get();

}

return str;

}

}

分享到:
评论

相关推荐

    论C#与Java之异同

    Dare Obasanjo撰写的这篇详尽且精准的文章——《论C#与Java之异同》首次发布于2001年,随着时间的推移,它已经成为了一个比较这两门语言的权威资料。基于C# 2.0和Java SE 6的新版本,Obasanjo更新了他的文章,旨在从...

    2014年Java最全面试题以及答案.

    ==是比较两个引用是否指向同一对象,而equals是比较两个对象的内容是否相等。 48. List, Set, Map是否继承自Collection接口? List和Set接口继承自Collection接口,而Map接口是独立于Collection之外的另一条继承体系...

    七年级生物下册第三节神经调节的基本方式教案济南版.pdf

    综上所述,七年级生物下册的这一节主要讲解了人体神经调节的基本方式,即反射,以及反射弧的结构和功能,通过具体的实验和实例帮助学生深入理解这一生理机制。同时,还强调了条件反射在学习过程中的角色,以及培养...

    java面试宝典

    - 使用`Strings=new String("xyz")`创建了两个字符串对象,一个是字符串池中的`"xyz"`,另一个是堆内存中的新对象。 - `new String("xyz")`与`String "xyz"`之间的主要区别在于内存分配方式和对象引用。 **知识点35...

    Asp.net面试题

    **反射**是.NET框架提供的一种强大机制,允许运行时程序动态地获取自身的结构信息,包括类型、成员、方法等,并能够通过这些信息来创建对象实例、调用方法或者设置字段和属性的值。 - **程序集**: 包含一个或多个...

    java程序员面试宝典

    `会创建两个`String`对象,一个在字符串常量池中,另一个在堆上。`new`关键字总是创建一个新的对象,即使字符串常量池中已有相同的字符串。 #### 34. String与StringBuffer的差异 `String`是不可变的,而`...

    Java面试八股文十万字总结.docx

    - `==`:比较两个变量是否指向同一个对象。 - `equals`:比较两个对象的内容是否相等。 **9. Hashcode的作用** 哈希码用于快速查找对象,通常与equals方法一起使用,以提高哈希表的性能。 **10. String、...

    整合了所有java经典面试题

    - 冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。 42. **String and StringBuffer的区别** - `String`是不可变的,每次修改都会创建一个新...

    ASP.NET面试必问的问题(内附答案),最必须的C#面试资料

    这两个过程结合起来,可以轻松地存储和传输数据。 O/R Mapping 的原理 利用反射,配置将对象和数据库表映射。 可访问性级别 1. public:访问不受限制。 2. protected:访问仅限于包含类或从包含类派生的类型。 3...

    net学习笔记及其他代码应用

    然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中...

    .NET程序员基础问题和答案

    - string str = "":创建了一个空字符串对象,占用内存空间。 - string str = null:表示字符串引用未指向任何对象,不占用内存空间。 - string str:仅声明了变量,未初始化,应避免这种情况,通常会初始化为 ...

    java面试题.pdf

    - 快速排序是一种分而治之的排序算法,通过选取一个“基准”将数组分为两部分,一部分比基准小,另一部分比基准大,然后递归地对这两部分继续进行排序。 4. **Overload和Override的区别。Overloaded的方法是否可以...

    java简答题

    两个整型变量i和j,不用中间变量进行交换。 - **通过算术运算实现变量交换:** ```java int i = 5, j = 6; i = i + j; // i=11 j = i - j; // j=5 i = i - j; // i=6 ``` - **通过位运算实现变量交换:** ``...

    unity3d c#面试题.docx

    关于 Debug 输出内容的问题,答案是两个 Debug 输出内容相同,因为它们都是在同一个线程中执行的。 Attribute 和反射 在 C# 中,Attribute 是一种用于添加元数据的机制。Attribute 可以应用于类、方法、字段、属性...

    资深程序员的Java面试题总结汇总.pdf

    3. 如果两个对象的`hashCode()`相同,但并不意味着`equals()`一定为true,因为`hashCode()`可能碰撞,但`equals()`必须遵循合同,如果`hashCode()`相同,`equals()`应返回true。 4. `final`关键字用于声明不可变的...

    Java面试宝典

    11. **引用类型与值类型的比较**:在Java中,对象是通过引用传递的,这意味着当你将一个对象的引用赋值给另一个变量时,两个变量实际上指向同一个内存地址。而基本数据类型则是按值传递的。 12. **静态成员与实例...

    .net程序员面试问题.pdf,这是一份不错的文件

    10. **`null`与字符串初始化**:`string str = null`表示字符串对象未被分配,而`string str = "中文"`则分配了一个含有中文字符的字符串对象。`null`和空字符串`""`是不同的,前者表示对象不存在,后者是长度为0的...

    ASP.net面试的一份题目

    19. 代码输出"Not Equal",因为i和j是两个不同的对象,即使值相同,ReferenceEquals比较的是引用而不是值。 20. C#中的三元运算符:`condition ? result_if_true : result_if_false`。 21. 整数a赋值给object对象...

    Java面试题-完整版.pdf

    对比类的面试题是比较两个技术的异同点,例如: * 接口和抽象类的区别是什么? + 共同点:两种都不能实例化对象 + 区别:抽象类除了可以包含抽象方法,还可以有实现方法、构造方法和普通成员数据,即使一个完整的...

    .Net 面试笔试大全-附答案

    由于中文字符在默认编码下占两个字节,因此`i`为14,`j`为11。 #### 十、string类型与null的区别 `string str = "";` 表示分配了一个空字符串的空间,而`string str = null;`则表示变量`str`没有指向任何字符串对象...

Global site tag (gtag.js) - Google Analytics