臥槽??!IntelliJ IDEA 居然偷偷改代碼。。
點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)
問題
要瘋了,IDEA 居然自動(dòng)修改代碼?
明明我已經(jīng)修改保存了,怎么測(cè)試都不行,后來我檢查一看,并通過復(fù)現(xiàn),發(fā)現(xiàn),代碼被 IDEA 自動(dòng)改了。。
如下面動(dòng)圖所示:
本來是
類.方法,我改成了實(shí)例.方法調(diào)用了

原來,每次當(dāng)我保存完之后,代碼又復(fù)原了,太詭異了。。
這樣一來,那我的實(shí)例對(duì)象不是沒用到?又直接訪問類的靜態(tài)方法了。。
定位
看到上圖,棧長(zhǎng)突然靈機(jī)一動(dòng),這讓我想起了之前分享過的《IntelliJ IDEA 2021.2 發(fā)布,這次要干掉 FindBugs 了!》這篇文章中的新功能:保存時(shí)動(dòng)作,即可以在保存的時(shí)候執(zhí)行代碼優(yōu)化操作,不用去逐一檢查優(yōu)化了,保存時(shí)就能做到。
更多 IDEA 教程,可以關(guān)注公眾號(hào):Java技術(shù)棧,我分享了一大堆了,關(guān)注后在菜單中就可以閱讀。
如下圖設(shè)置所示:

我確實(shí)開啟了各項(xiàng)保存時(shí)動(dòng)作,其中我就勾選了一個(gè)自動(dòng)清理修復(fù)的選項(xiàng)。
然后在 Inspections 菜單中:

通過實(shí)例對(duì)象訪問靜態(tài)成員的警告也是打開的,意思就是不允許/不建議通過實(shí)例對(duì)象訪問靜態(tài)成員。
所以,我猜測(cè)可能就是保存時(shí)的清理動(dòng)作觸發(fā)了這條規(guī)則,然后就被自動(dòng)優(yōu)化了。
所以,我把它先取消勾選:

然后再測(cè)試下:

現(xiàn)在通過實(shí)例對(duì)象訪問靜態(tài)方法,再保存,實(shí)例對(duì)象不再被替換為類了,生效了,就是可以允許通過實(shí)例.靜態(tài)成員這種調(diào)用方式了。
同時(shí)我也發(fā)現(xiàn) Spring Boot 這個(gè)啟動(dòng) run 方法也是提供了普通方法版本的,傳入 args 即可,這樣就不是靜態(tài)調(diào)用了。
現(xiàn)在再把那個(gè)選項(xiàng)再次勾選上:

如圖,它再也不會(huì)被替換為類的調(diào)用了,因?yàn)樗{(diào)用的就是普通方法。
總結(jié)
IDEA 的一個(gè)小優(yōu)化,確實(shí)把我折騰了一翻, IDEA 真的太智能了,有時(shí)候幫你優(yōu)化了,你可能還不知道,這個(gè)確實(shí)要值得注意??!
其實(shí)通過 實(shí)例.靜態(tài)成員 這種訪問形式,語法上是可以的,但不建議,靜態(tài)成員毫無疑問是類級(jí)別的,自然需要通過類來調(diào)用,所以,我建議那個(gè)選項(xiàng)也不要取消勾選,默認(rèn)的就是符合正常規(guī)則的。
好了,解決了這個(gè)疑惑,現(xiàn)在又可以繼續(xù)愉快的寫代碼了。。
其實(shí) IDEA 也有開源的社區(qū)版本,收費(fèi)的專業(yè)版也很容易申請(qǐng)到免費(fèi)激活碼,可以參考教程:
http://www.javastack.cn/article/2020/intellij-idea-by-open-source-project/
也可以關(guān)注公眾號(hào)Java技術(shù)棧,回復(fù):IDEA,閱讀我分享過的獲取正版 IDEA 激活碼的教程,很多粉絲都反饋說輕松得到了,感興趣的都可以去申請(qǐng),不能太容易了。
關(guān)注我,后面棧長(zhǎng)會(huì)繼續(xù)分享 IDEA 系列教程,帶你打通 IDEA 的任督二脈!
版權(quán)聲明: 本文系公眾號(hào) "Java技術(shù)棧" 原創(chuàng),轉(zhuǎn)載、引用本文內(nèi)容請(qǐng)注明出處,抄襲、洗稿一律投訴侵權(quán),后果自負(fù),并保留追究其法律責(zé)任的權(quán)利。

關(guān)注Java技術(shù)??锤喔韶?/strong>


