在Java中怎么比较两个对象

技术在Java中怎么比较两个对象这篇文章主要为大家展示了“在Java中怎么比较两个对象”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“在Java中怎么比较两个对象”这篇文章吧。

这篇文章主要为大家展示了"在爪哇中怎么比较两个对象",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"在爪哇中怎么比较两个对象"这篇文章吧。

普通郎中的建设者包内提供了一个DiffBuilder类,可以比较两个对象,并返回不同的部分。

首先在要比较对象的类中实现不同的接口,然后实现差异结果差异方法。

在差异结果差异方法中,新建一个DiffBuilder对象,把需要比较的类属性一一放入DiffBuilder中。

DiffBuilder的构造函数有三个入参左侧是当前对象英国皇家园艺协会是要比较的对象,风格是比较结果输出的格式。

区分构建器(最终,最终,

finalToStringStylestyle)假设有一个人类定义了三个属性姓名、年龄和吸烟者。以下是使用不同的ToStringStyle所对应的输出内容。

ToStringStyle说明输出短前缀样式简短人物[姓名=deniro,吸烟者=false]不同于人物[姓名=杰克,吸烟者=true]DEFAULT_STYLE默认组织。阿帕奇。公地。郎3。建筑商。人@ 9f 70 c 54[姓名=deniro,吸烟者=false]与组织。阿帕奇。公地。郎3。建筑商。person @ 234 bef 66[name=jack,smoker=true]不同。多线样式多行组织。阿帕奇。公地。郎3。建筑商。人@ 9f 70 c 54[

名称丹尼罗

吸烟者=假

]不同于组织。阿帕奇。公地。郎3。建筑商。person @ bef 234 66[

名字=杰克

吸烟者=真

]否_字段_名称_样式不包含类属性名组织。阿帕奇。公地。郎3。建筑商。person @ 9f 70 c 54[deniro,false]与组织。阿帕奇。公地。郎3。建筑商。person @ bef 234 66[jack,true]不同。简单_风格简洁丹尼洛,假的不同于杰克,真的。无类名称样式不包含类名[姓名=deniro,吸烟者=false]与[姓名=杰克,吸烟者=真]不同。JSON _ STYLEJSON { ' name ' : ' deniro ','吸烟者:false}不同于{'name':'jack ','吸烟者:true}。感觉无类名称样式与JSON_STYLE看的更清楚。

完整示例:

public class person complementdiffable person {

privatedstaticfilterlog=记录器工厂。getlogger(Perso

n.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)

以上是“在Java中怎么比较两个对象”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/115594.html

(0)

相关推荐

  • 铁与稀硝酸反应,少量铁和稀硝酸反应离子方程式

    技术铁与稀硝酸反应,少量铁和稀硝酸反应离子方程式(1)少量铁与稀硝酸反应(或铁粉与过量稀硝酸反应)的方程式:Fe+4HNO3(稀)=Fe(NO3)3+NO↑+2H2O
    离子方程式为:
    Fe+4H+ +NO3-==Fe3

    生活 2021年10月26日
  • 权限设置在哪里,设置应用管理怎么开权限

    技术权限设置在哪里,设置应用管理怎么开权限工具/原料:小米6手机权限设置在哪里、手机管家 小米6手机应用管理权限开启操作步骤如下: 1、在手机桌面找到【手机管家】,点击进入【手机管家】;
    2、在【手机管家】界面,

    生活 2021年10月20日
  • parameters里的默认数值怎么设置(parameters怎么赋值给它)

    技术Parameters参数怎么使用本篇内容介绍了“Parameters参数怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够

    攻略 2021年12月24日
  • mysql数据库删除表报错表不存在(mysql创建表总是报错怎么办)

    技术mysql端删表卡住出现报错怎么解决本篇内容介绍了“mysql端删表卡住出现报错怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅

    攻略 2021年12月22日
  • VBS如何打开当前脚本所在文件夹

    技术VBS如何打开当前脚本所在文件夹小编给大家分享一下VBS如何打开当前脚本所在文件夹,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!方法一:W

    攻略 2021年11月1日
  • 香港云与VPS的区别云服务器香港

    技术香港云与VPS的区别云服务器香港任何稳运行的网站都需要的云服务器与VPS服务器平台的基石。如果不了解这些云服务器和VPS,选择合适的网络托管类型可能既乏味又耗时。下面就来简单介绍一下二者的区别什么是香港云服务器? 云

    礼包 2021年12月17日