Java自定義equals產(chǎn)生的問(wèn)題分析
Java自定義equals注意事項(xiàng)
對(duì)于需要用某業(yè)務(wù)主鍵判斷對(duì)象相等時(shí),通常用 IDE 自動(dòng)生成 equals 方法,選定特點(diǎn)的判斷字段。
但對(duì)于有父類(lèi)的類(lèi)來(lái)說(shuō),默認(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)的代碼,遭遇過(guò)兩次坑。例如這里的 Person 對(duì)象只需要根據(jù) id 相等,就視為同一個(gè)對(duì)象,但是有了這句調(diào)用,執(zhí)行列表的 contains 方法始終返回 false,斷點(diǎn)找到了這個(gè)問(wèn)題。
解決辦法:自定義具有父類(lèi)的類(lèi)的 equals 方法時(shí),需要去掉這行。這個(gè)問(wèn)題一碰到就感覺(jué)很熟悉,想起去年6月也遇到集合操作自定義對(duì)象判斷失敗的問(wèn)題,所以斷點(diǎn)到了 super 調(diào)用返回 false 就知道問(wèn)題所在了。
logback.xml配置maxFileSize單位問(wèn)題
項(xiàng)目中的 logback.xml 配置文件,忘記了從哪里扒來(lái)的,本地測(cè)試時(shí)只關(guān)注控制臺(tái)日志,沒(méi)發(fā)現(xiàn)問(wèn)題。部署測(cè)試機(jī)器后,發(fā)現(xiàn)異常信息沒(méi)有寫(xiě)入到日志文件中,為什么呢?
日志文件生成策略是滾動(dòng)達(dá)到文件最大值后新建文件,配置如下:
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>50M</maxFileSize>
</triggeringPolicy>
跟蹤過(guò)程,打開(kāi)調(diào)試配置,在 logback.xml 中添加配置:<configuration debug="true">。
啟動(dòng),查看日志插件的調(diào)試信息,異常提示 maxFileSize 屬性設(shè)置報(bào)錯(cuò)了。調(diào)試到 logback-core 源碼中,發(fā)現(xiàn)文件大小的單位使用的是 gb/mb/kb,且不區(qū)分大小寫(xiě)。修正文件大小配置為:
<maxFileSize>50MB</maxFileSize>
為什么以前沒(méi)有碰到過(guò)這個(gè)問(wèn)題呢?因?yàn)橐郧暗娜罩径际菨L動(dòng)按天生成的,這里拷貝過(guò)來(lái)的日志文件生成策略是按文件大小。這個(gè)配置有個(gè)好處,就是不會(huì)生成太多日志文件。
SpringCloud gateway項(xiàng)目引入druid
SpringCloud 的 gateway 項(xiàng)目是基于 Netty 的,與 Servlet 不相容。網(wǎng)關(guān)模塊中需要加入數(shù)據(jù)庫(kù)操作,引入 druid,常規(guī)的數(shù)據(jù)源配置報(bào) Servlet 包相關(guān)的問(wèn)題。
解決辦法是,關(guān)掉 spring.datasource.druid 的 stat-view-servlet 配置:
stat-view-servlet:
enabled: false
web-stat-filter:
enabled: false
Shell編寫(xiě)腳本
Shell 編寫(xiě)腳本時(shí),cd 命令切換到一個(gè)不存在的變量時(shí),默認(rèn)會(huì)到當(dāng)前用戶的 HOME 目錄。
#!/sh
currentDir=$(cd `dirname $0`; pwd)
cd $currrentDir
echo `pwd`
這是常用的獲取當(dāng)前執(zhí)行命令腳本的路徑,第三行切換路徑時(shí),變量拼寫(xiě)錯(cuò)誤,導(dǎo)致切換到腳本目錄總是到了 /root ,這個(gè)低級(jí)錯(cuò)誤,找了半天。
到此這篇關(guān)于Java自定義equals產(chǎn)生的問(wèn)題分析的文章就介紹到這了,更多相關(guān)Java自定義equals內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何用ObjectMapper將復(fù)雜Map轉(zhuǎn)換為實(shí)體類(lèi)
這篇文章主要介紹了如何用ObjectMapper將復(fù)雜Map轉(zhuǎn)換為實(shí)體類(lèi)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
IDEA中創(chuàng)建maven項(xiàng)目webapp目錄無(wú)法識(shí)別即未被標(biāo)識(shí)的解決辦法
在學(xué)習(xí)SpringMVC課程中,基于IDEA新建maven項(xiàng)目模塊后,webapp目錄未被標(biāo)識(shí),即沒(méi)有小藍(lán)點(diǎn)的圖標(biāo)顯示,所以本文給大家介紹了IDEA中創(chuàng)建maven項(xiàng)目webapp目錄無(wú)法識(shí)別即未被標(biāo)識(shí)的解決辦法,需要的朋友可以參考下2024-03-03
使用IDEA如何導(dǎo)入SpringBoot項(xiàng)目
這篇文章主要介紹了使用IDEA如何導(dǎo)入SpringBoot項(xiàng)目問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,2023-12-12
Hibernate框架數(shù)據(jù)分頁(yè)技術(shù)實(shí)例分析
這篇文章主要介紹了Hibernate框架數(shù)據(jù)分頁(yè)技術(shù),結(jié)合實(shí)例形式分析了Hibernate框架實(shí)現(xiàn)數(shù)據(jù)分頁(yè)的原理,步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-03-03
利用java+mysql遞歸實(shí)現(xiàn)拼接樹(shù)形JSON列表的方法示例
這篇文章主要給大家介紹了關(guān)于利用java+mysql遞歸實(shí)現(xiàn)拼接樹(shù)形JSON列表的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起看看吧。2017-08-08
學(xué)習(xí)Java九大內(nèi)置對(duì)象
學(xué)習(xí)Java九大內(nèi)置對(duì)象,從現(xiàn)在開(kāi)始,希望大家可以通過(guò)這篇文章可以真正的理解Java九大內(nèi)置對(duì)象,感興趣的朋友可以參考一下2016-05-05

