Java自定義equals產(chǎn)生的問題分析
Java自定義equals注意事項
對于需要用某業(yè)務(wù)主鍵判斷對象相等時,通常用 IDE 自動生成 equals
方法,選定特點(diǎn)的判斷字段。
但對于有父類的類來說,默認(rèn)有一句調(diào)用比較坑:
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;
這一句默認(rèn)的代碼,遭遇過兩次坑。例如這里的 Person 對象只需要根據(jù) id 相等,就視為同一個對象,但是有了這句調(diào)用,執(zhí)行列表的 contains
方法始終返回 false,斷點(diǎn)找到了這個問題。
解決辦法:自定義具有父類的類的 equals 方法時,需要去掉這行。這個問題一碰到就感覺很熟悉,想起去年6月也遇到集合操作自定義對象判斷失敗的問題,所以斷點(diǎn)到了 super 調(diào)用返回 false 就知道問題所在了。
logback.xml配置maxFileSize單位問題
項目中的 logback.xml 配置文件,忘記了從哪里扒來的,本地測試時只關(guān)注控制臺日志,沒發(fā)現(xiàn)問題。部署測試機(jī)器后,發(fā)現(xiàn)異常信息沒有寫入到日志文件中,為什么呢?
日志文件生成策略是滾動達(dá)到文件最大值后新建文件,配置如下:
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>50M</maxFileSize> </triggeringPolicy>
跟蹤過程,打開調(diào)試配置,在 logback.xml 中添加配置:<configuration debug="true">
。
啟動,查看日志插件的調(diào)試信息,異常提示 maxFileSize
屬性設(shè)置報錯了。調(diào)試到 logback-core 源碼中,發(fā)現(xiàn)文件大小的單位使用的是 gb/mb/kb
,且不區(qū)分大小寫。修正文件大小配置為:
<maxFileSize>50MB</maxFileSize>
為什么以前沒有碰到過這個問題呢?因為以前的日志都是滾動按天生成的,這里拷貝過來的日志文件生成策略是按文件大小。這個配置有個好處,就是不會生成太多日志文件。
SpringCloud gateway項目引入druid
SpringCloud 的 gateway 項目是基于 Netty 的,與 Servlet 不相容。網(wǎng)關(guān)模塊中需要加入數(shù)據(jù)庫操作,引入 druid,常規(guī)的數(shù)據(jù)源配置報 Servlet 包相關(guān)的問題。
解決辦法是,關(guān)掉 spring.datasource.druid 的 stat-view-servlet 配置:
stat-view-servlet:
enabled: false
web-stat-filter:
enabled: false
Shell編寫腳本
Shell 編寫腳本時,cd
命令切換到一個不存在的變量時,默認(rèn)會到當(dāng)前用戶的 HOME 目錄。
#!/sh
currentDir=$(cd `dirname $0`; pwd)
cd $currrentDir
echo `pwd`
這是常用的獲取當(dāng)前執(zhí)行命令腳本的路徑,第三行切換路徑時,變量拼寫錯誤,導(dǎo)致切換到腳本目錄總是到了 /root
,這個低級錯誤,找了半天。
到此這篇關(guān)于Java自定義equals產(chǎn)生的問題分析的文章就介紹到這了,更多相關(guān)Java自定義equals內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javaweb中Filter(過濾器)的常見應(yīng)用
這篇文章主要介紹了javaweb中Filter的常見應(yīng)用,過濾器的使用方法,感興趣的小伙伴們可以參考一下2015-12-12SpringBoot整合Mybatis Generator自動生成代碼
SpringBoot 整合 Mybatis Generator自動生成dao、entity、mapper.xml實現(xiàn)單表增刪改查。文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-08-08springboot中websocket簡單實現(xiàn)
本文主要介紹了springboot中websocket簡單實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01詳解mall整合SpringBoot+MyBatis搭建基本骨架
這篇文章主要介紹了詳解mall整合SpringBoot+MyBatis搭建基本骨架,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08利用Maven實現(xiàn)將代碼打包成第三方公共jar包
在項目開發(fā)過程中,我們經(jīng)常需要將一些公共方法提取出來,然后單獨(dú)封裝成一個第三方公共jar包,采用普通的方式打包后的jar,依賴的工程執(zhí)行編譯時,卻提示找不到對應(yīng)的依賴包,那么如何將工程打包為可執(zhí)行jar包呢?下面向大家分享三種方法2022-10-10淺談Java中向上造型向下造型和接口回調(diào)中的問題
這篇文章主要介紹了淺談Java中向上造型向下造型和接口回調(diào)中的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08