Java自定义equals产生的问题分析

 更新时间:2023年01月30日 11:33:15   作者:毕小宝  
这篇文章主要介绍了Java自定义equals时super.equals带来的问题分析,总的来说这并不是一道难题,那为什么要拿出这道题介绍?拿出这道题真正想要传达的是解题的思路,以及不断优化探寻最优解的过程。希望通过这道题能给你带来一种解题优化的思路

Java自定义equals注意事项

对于需要用某业务主键判断对象相等时,通常用 IDE 自动生成 equals 方法,选定特点的判断字段。

但对于有父类的类来说,默认有一句调用比较坑:

public class Person extends ParentObject{
    private String id;
    private String name;
    private int age;
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        if (!super.equals(o)) return false;
        Person person = (Person) o;
        return id.equals(person.id);
    }
    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), id);
    }
}

if (!super.equals(o)) return false; 这一句默认的代码,遭遇过两次坑。例如这里的 Person 对象只需要根据 id 相等,就视为同一个对象,但是有了这句调用,执行列表的 contains 方法始终返回 false,断点找到了这个问题。

解决办法:自定义具有父类的类的 equals 方法时,需要去掉这行。这个问题一碰到就感觉很熟悉,想起去年6月也遇到集合操作自定义对象判断失败的问题,所以断点到了 super 调用返回 false 就知道问题所在了。

logback.xml配置maxFileSize单位问题

项目中的 logback.xml 配置文件,忘记了从哪里扒来的,本地测试时只关注控制台日志,没发现问题。部署测试机器后,发现异常信息没有写入到日志文件中,为什么呢?

日志文件生成策略是滚动达到文件最大值后新建文件,配置如下:

<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
    <maxFileSize>50M</maxFileSize>
</triggeringPolicy>

跟踪过程,打开调试配置,在 logback.xml 中添加配置:<configuration debug="true">

启动,查看日志插件的调试信息,异常提示 maxFileSize 属性设置报错了。调试到 logback-core 源码中,发现文件大小的单位使用的是 gb/mb/kb,且不区分大小写。修正文件大小配置为:

<maxFileSize>50MB</maxFileSize>

为什么以前没有碰到过这个问题呢?因为以前的日志都是滚动按天生成的,这里拷贝过来的日志文件生成策略是按文件大小。这个配置有个好处,就是不会生成太多日志文件。

SpringCloud gateway项目引入druid

SpringCloud 的 gateway 项目是基于 Netty 的,与 Servlet 不相容。网关模块中需要加入数据库操作,引入 druid,常规的数据源配置报 Servlet 包相关的问题。

解决办法是,关掉 spring.datasource.druid 的 stat-view-servlet 配置:

stat-view-servlet:
    enabled: false
    web-stat-filter:
      enabled: false

Shell编写脚本

Shell 编写脚本时,cd 命令切换到一个不存在的变量时,默认会到当前用户的 HOME 目录。

#!/sh
currentDir=$(cd `dirname $0`; pwd)
cd $currrentDir
echo `pwd`

这是常用的获取当前执行命令脚本的路径,第三行切换路径时,变量拼写错误,导致切换到脚本目录总是到了 /root ,这个低级错误,找了半天。

到此这篇关于Java自定义equals产生的问题分析的文章就介绍到这了,更多相关Java自定义equals内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何用ObjectMapper将复杂Map转换为实体类

    如何用ObjectMapper将复杂Map转换为实体类

    这篇文章主要介绍了如何用ObjectMapper将复杂Map转换为实体类的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java哈希表和有序表实例代码讲解

    Java哈希表和有序表实例代码讲解

    这篇文章主要介绍了Java哈希表和有序表,哈希表也称散列表,是一种以键值对形式存储记录的数据结构,该数据结构支持根据键的内容直接访问在内存特定位置的值,并且可以进行查找、添加和删除操作
    2023-04-04
  • Java命令设计模式详解

    Java命令设计模式详解

    这篇文章主要为大家详细介绍了Java命令设计模式,对命令设计模式进行分析理解,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • IDEA中创建maven项目webapp目录无法识别即未被标识的解决办法

    IDEA中创建maven项目webapp目录无法识别即未被标识的解决办法

    在学习SpringMVC课程中,基于IDEA新建maven项目模块后,webapp目录未被标识,即没有小蓝点的图标显示,所以本文给大家介绍了IDEA中创建maven项目webapp目录无法识别即未被标识的解决办法,需要的朋友可以参考下
    2024-03-03
  • java设计模式--建造者模式详解

    java设计模式--建造者模式详解

    这篇文章主要介绍了Java设计模式之建造者模式,结合具体实例形式分析了建造者模式的概念、原理、实现方法与相关使用注意事项,需要的朋友可以参考下
    2021-07-07
  • 使用IDEA如何导入SpringBoot项目

    使用IDEA如何导入SpringBoot项目

    这篇文章主要介绍了使用IDEA如何导入SpringBoot项目问题,具有很好的参考价值,希望对大家有所帮助,
    2023-12-12
  • Hibernate框架数据分页技术实例分析

    Hibernate框架数据分页技术实例分析

    这篇文章主要介绍了Hibernate框架数据分页技术,结合实例形式分析了Hibernate框架实现数据分页的原理,步骤与相关实现技巧,需要的朋友可以参考下
    2016-03-03
  • 利用java+mysql递归实现拼接树形JSON列表的方法示例

    利用java+mysql递归实现拼接树形JSON列表的方法示例

    这篇文章主要给大家介绍了关于利用java+mysql递归实现拼接树形JSON列表的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起看看吧。
    2017-08-08
  • 学习Java九大内置对象

    学习Java九大内置对象

    学习Java九大内置对象,从现在开始,希望大家可以通过这篇文章可以真正的理解Java九大内置对象,感兴趣的朋友可以参考一下
    2016-05-05
  • 详解Java泛型及其应用

    详解Java泛型及其应用

    这篇文章主要介绍了Java泛型及其应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04

最新评论