iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >在Java中如何比较两个对象浅析
  • 405
分享到

在Java中如何比较两个对象浅析

2024-04-02 19:04:59 405人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

Common Lang 中的 Builder 包内提供了一个 DiffBuilder 类,可以比较两个对象,并返回不同的部分。 首先在要比较对象的类中实现 Diffable

Common Lang 中的 Builder 包内提供了一个 DiffBuilder 类,可以比较两个对象,并返回不同的部分。

  1. 首先在要比较对象的类中实现 Diffable 接口,然后实现 DiffResult diff(T obj)  方法。
  2. 在DiffResult diff(T obj)  方法中,新建一个 DiffBuilder 对象,把需要比较的类属性一一放入 DiffBuilder 中。

DiffBuilder 的构造函数有三个入参,lhs 是当前对象,rhs 是要比较的对象,style 是比较结果输出的格式。


DiffBuilder(final T lhs, final T rhs,
        final ToStringStyle style)

假设有一个 Person 类定义了三个属性 name、age 和 smoker。以下是使用不同的 ToStringStyle 所对应的输出内容。

ToStringStyle 说明 输出
SHORT_PREFIX_STYLE 简短 Person[name=deniro,smoker=false] differs from Person[name=jack,smoker=true]
DEFAULT_STYLE 默认 org.apache.commons.lang3.builder.Person@9f70c54[name=deniro,smoker=false] differs from org.apache.commons.lang3.builder.Person@234bef66[name=jack,smoker=true]。
MULTI_LINE_STYLE 多行 org.apache.commons.lang3.builder.Person@9f70c54[
name=deniro
smoker=false
] differs from org.apache.commons.lang3.builder.Person@234bef66[
name=jack
smoker=true
]
NO_FIELD_NAMES_STYLE 不包含类属性名 org.apache.commons.lang3.builder.Person@9f70c54[deniro,false] differs from org.apache.commons.lang3.builder.Person@234bef66[jack,true]。
SIMPLE_STYLE 简洁 deniro,false differs from jack,true。
NO_CLASS_NAME_STYLE 不包含类名 [name=deniro,smoker=false] differs from [name=jack,smoker=true]。
JSON_STYLE jsON {"name":"deniro","smoker":false} differs from {"name":"jack","smoker":true}。

感觉 NO_CLASS_NAME_STYLE 与 JSON_STYLE 看的更清楚。

完整示例:


public class Person implements Diffable<Person> {

    private static final Logger log = LoggerFactory.getLogger(Person.class);

    String name;
    int age;
    boolean smoker;

    public DiffResult diff(Person obj) {
        // No need for null check, as NullPointerException correct if obj is null
        return new DiffBuilder(this, obj, ToStringStyle.SHORT_PREFIX_STYLE)
                .append("name", this.name, obj.name)
                .append("age", this.age, obj.age)
                .append("smoker", this.smoker, obj.smoker)
                .build();
    }

    public static void main(String[] args) {
        Person a = new Person();
        a.name = "deniro";
        a.age = 22;
        a.smoker = false;

        Person b = new Person();
        b.name = "jack";
        b.age = 22;
        b.smoker = true;

        DiffResult result = a.diff(b);
        log.info("result -> {}。", result);
    }
}

输出:

result -> Person[name=deniro,smoker=false] differs from Person[name=jack,smoker=true]。

如果是个大类,那么需要很多个 append 方法把这个大类的属性放到 DiffBuilder 中,不太方便。可以写个程序生成 DiffBuilder 初始化代码,或者尝试用反射优化这部分代码。

反射扩展:

(1)获取对象所属类的Class方法。


Class c = Class.forName("包.类名称");

(2)获得该类的所有Filed(不包括父类)。


Field[] fields = c.getDeclaredFields();

(3)将所有属性的访问权限设为true。

因为JavaBean中所有的属性访问权限都是private,所以无法直接获得所有属性,因此我们必须获得其访问权限,通过下面的方法完成:


setAccessible(true);

(4)输出对象属性


f.getField(对象名称);

(5)获取字段名


fields[j].getName()

(6)获取字段值


fields[j].get(obj)

参考资料

commons.apache.org/proper/comm…

总结

到此这篇关于在Java中如何比较两个对象的文章就介绍到这了,更多相关Java比较两个对象内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 在Java中如何比较两个对象浅析

本文链接: https://www.lsjlt.com/news/158302.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 在Java中如何比较两个对象浅析
    Common Lang 中的 Builder 包内提供了一个 DiffBuilder 类,可以比较两个对象,并返回不同的部分。 首先在要比较对象的类中实现 Diffable...
    99+
    2022-11-12
  • 在Java中怎么比较两个对象
    这篇文章主要为大家展示了“在Java中怎么比较两个对象”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“在Java中怎么比较两个对象”这篇文章吧。Common Lang 中的 Builder 包内提...
    99+
    2023-06-21
  • 浅谈java自定义中类两个对象的比较
    目录 实现比较两个对象是否相同 1.前置代码 1.学生类 2.示例  3.输出  4.原因 2.那么我们要怎么做呢 1.对Student类中重新实现quals方法(即对equals方法重写)  2.完整代码如下: 3.具体操作 4.演示 ...
    99+
    2023-09-20
    java 开发语言 学习 学习方法 程序人生 intellij-idea
  • java如何比较两个对象是否相等
    在Java中,可以使用equals()方法来比较两个对象是否相等。该方法是Object类的一个方法,所有的类都继承自Object类。...
    99+
    2023-10-24
    java
  • java怎么比较两个对象的内容
    在Java中比较两个对象的内容通常有以下几种方法: 使用equals()方法:重写equals()方法可以比较两个对象的内容。eq...
    99+
    2023-10-28
    java
  • 利用java怎么对两个对象的属性进行比较
    利用java怎么对两个对象的属性进行比较?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。两个对象进行比较相等,有两种做法:1、情况一:当仅仅只是判断两个对象是否相...
    99+
    2023-05-31
    java ava
  • 在python中如何比较两个float
    前几天跟同事聊起来,在计算机内部float比较是很坑爹的事情。比方说,0.1+0.2得到的结果竟然不是0.3 >>> 0.1+0.2 0.30000000000000004 这篇文章做了详细的解释,简单的来说就是计算...
    99+
    2023-01-31
    两个 python float
  • Java中对象比较的示例分析
    这篇文章主要介绍了Java中对象比较的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。元素比较基本类型的比较在Java中,基本类型的对象可以直接比较大小public&n...
    99+
    2023-06-29
  • Java比较两个对象大小的三种方法详解
    目录一. 为什么需要比较对象二. 元素的比较1. 基本类型的比较 2. 引用类型的比较 三. 对象比较的方法1. equals方法比较2. 基于Comparabl...
    99+
    2022-11-13
  • Java如何比较两个对象并获取不相等的字段详解
    目录 写在前面缘起实现使用方法扩展后记附:JAVA判断(获取)两个相同对象不同的数据 写在前面 在工作中,我们经常会遇到这样的需求——比较两个对象是否相等,如果不相等的话,取出不相等...
    99+
    2022-11-12
  • ASP 框架对象和 Django:如何在两个框架之间进行比较?
    ASP框架对象和Django:如何在两个框架之间进行比较? 在现代Web开发中,框架是必不可少的工具。ASP框架和Django是两个非常流行的框架,它们都提供了强大的工具来简化Web开发。但是,它们之间的差异是什么?本文将介绍ASP框架对象...
    99+
    2023-11-11
    框架 对象 django
  • 如何go语言比较两个对象是否深度相同
    前言: func DeepEqual(x, y interface{}) bool DeepEqual 函数的参数是两个 interface,实际上也就是可...
    99+
    2022-06-07
    GO 对象 go语言
  • Java怎么比较两个对象并获取不相等的字段
    这篇文章主要介绍“Java怎么比较两个对象并获取不相等的字段”,在日常操作中,相信很多人在Java怎么比较两个对象并获取不相等的字段问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java怎么比较两个对象并获取...
    99+
    2023-06-21
  • Java Stream比较两个List的差异,并取出不同的对象
    可以使用Java8的Stream API来比较两个List的差异,并取出不同的对象。 方式一具体步骤如下:   1. 将两个List转换为Stream类型;   2. 调用Stream的filter方法,将不同的对象过滤出来;   ...
    99+
    2023-09-02
    java list
  • java中关于对象的实例比较分析
    本篇内容主要讲解“java中关于对象的实例比较分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java中关于对象的实例比较分析”吧!同类型对象的比较三个维度去比较同一性相等性相似性样例引入想象...
    99+
    2023-06-26
  • Java比较两个对象中全部属性值是否相等的方法
    例如下述Java类: import java.io.Serializable; import java.util.List; public class Bean_Topolog...
    99+
    2022-11-12
  • 怎么用Java比较两个对象中全部属性值是否相等
    本篇内容介绍了“怎么用Java比较两个对象中全部属性值是否相等”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!例如下述Java类:import...
    99+
    2023-06-20
  • JavaScript中如何比较两个日期
    这篇文章给大家分享的是有关js中如何比较两个日期的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。JavaScript的特点1.JavaScript主要用来向HTML页面添加交互行为。2.JavaScript可以直接...
    99+
    2023-06-14
  • java如何比较两个字符串相等
    在Java中,可以使用equals()方法来比较两个字符串是否相等。equals()方法是String类的一个方法,用于比较两个字符...
    99+
    2023-08-22
    java
  • js如何比较两个单独的数组或对象是否相等
    这篇文章主要介绍js如何比较两个单独的数组或对象是否相等,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!所谓js的中的传值,其实也就是说5种基本数据类型(null,undefind,b...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作