Java 自定义 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 编写脚本时,cd 命令切换到一个不存在的变量时,默认会到当前用户的 HOME 目录。

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

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

#java##程序员#
全部评论
带来问题分析问题最终解决问题超赞
点赞 回复 分享
发布于 2022-08-28 17:34 河南

相关推荐

来,说点可能被同行“骂”的大实话。🙊当初接数字马力Offer时,朋友都说:“蚂蚁的“内包”公司?你想清楚啊!”但入职快一年后的今天,我反而对他有了不一样的看法!🔹&nbsp;是偏见?还是信息差!之前没入职之前外面都在说什么岗位低人一等这类。实际上:这种情况不可至否,不能保证每个团队都是其乐融融。但我在的部门以及我了解的周边同事都还是十分好相处的~和蚂蚁师兄师姐之间也经常开一些小玩笑。总之:身份是蚂蚁公司给的,地位是自己挣的(一个傲娇女孩的自述)。🔹&nbsp;待遇?玩的就是真实!试用期工资全额发!六点下班跑得快(早9晚6或者早10晚7,动态打卡),公积金顶格交。别听那些画饼的,到手的钱和下班的时间才是真的(都是牛马何必难为牛马)。🔹&nbsp;能不能学到技术?来了就“后悔”!我们拥有权限直通蚂蚁知识库,技术栈多到学不完。说“学不到东西”的人,来了可能后悔——后悔来晚了(哈哈哈哈,可以不学但是不能没有)!💥&nbsp;内推地址:https://app.mokahr.com/su/ueoyhg❗我的内推码:NTA6Nvs走我的内推,可以直达业务部门,面试流程更快速,进度可查!今天新放HC,之前挂过也能再战!秋招已经正式开始啦~机会就摆在这,敢不敢来试一试呢?(和我一样,做个勇敢的女孩)
下午吃泡馍:数字马力的薪资一般哇,5年经验的java/测试就给人一万出头,而且刚入职第三天就让人出差,而且是出半年
帮你内推|数字马力 校招
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务