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

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

我確實開啟了各項保存時動作,其中我就勾選了一個自動清理修復的選項。
然后在 Inspections 菜單中:

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

然后再測試下:

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

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

關注Java技術??锤喔韶?/strong>


