卧槽!!IntelliJ IDEA 居然偷偷改代碼。。

語言: CN / TW / HK

問題

要瘋了,IDEA 居然自動修改代碼?

明明我已經修改保存了,怎麼測試都不行,後來我檢查一看,並通過復現,發現,代碼被 IDEA 自動改了。。

如下面動圖所示:

本來是 類.方法,我改成了 實例.方法 調用了

原來,每次當我保存完之後,代碼又復原了,太詭異了。。

這樣一來,那我的實例對象不是沒用到?又直接訪問類的靜態方法了。。

定位

看到上圖,棧長突然靈機一動,這讓我想起了之前分享過的《IntelliJ IDEA 2021.2 發佈,這次要幹掉 FindBugs 了!》這篇文章中的新功能:保存時動作,即可以在保存的時候執行代碼優化操作,不用去逐一檢查優化了,保存時就能做到。

更多 IDEA 教程,可以關注公眾號:Java技術棧,我分享了一大堆了,關注後在菜單中就可以閲讀。

如下圖設置所示:

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

然後在 Inspections 菜單中:

通過實例對象訪問靜態成員的警告也是打開的,意思就是不允許/不建議通過實例對象訪問靜態成員。

所以,我猜測可能就是保存時的清理動作觸發了這條規則,然後就被自動優化了。

所以,我把它先取消勾選:

然後再測試下:

現在通過實例對象訪問靜態方法,再保存,實例對象不再被替換為類了,生效了,就是可以允許通過實例.靜態成員這種調用方式了。

同時我也發現 Spring Boot 這個啟動 run 方法也是提供了普通方法版本的,傳入 args 即可,這樣就不是靜態調用了。現在再把那個選項再次勾選上:

如圖,它再也不會被替換為類的調用了,因為它調用的就是普通方法。

總結

IDEA 的一個小優化,確實把我折騰了一翻, IDEA 真的太智能了,有時候幫你優化了,你可能還不知道,這個確實要值得注意!!

其實通過 實例.靜態成員 這種訪問形式,語法上是可以的,但不建議,靜態成員毫無疑問是類級別的,自然需要通過類來調用,所以,我建議那個選項也不要取消勾選,默認的就是符合正常規則的。

好了,解決了這個疑惑,現在又可以繼續愉快的寫代碼了。。

其實 IDEA 也有開源的社區版本,收費的專業版也很容易申請到免費激活碼,可以參考教程:

http://www.javastack.cn/article/2020/intellij-idea-by-open-source-project/

也可以關注公眾號Java技術棧,回覆:IDEA,閲讀我分享過的獲取正版 IDEA 激活碼的教程,很多粉絲都反饋説輕鬆得到了,感興趣的都可以去申請,不能太容易了。

關注我,後面棧長會繼續分享 IDEA 系列教程,帶你打通 IDEA 的任督二脈!

版權聲明: 本文系公眾號 "Java技術棧" 原創,轉載、引用本文內容請註明出處,抄襲、洗稿一律投訴侵權,後果自負,並保留追究其法律責任的權利。

近期熱文推薦:

1.1,000+ 道 Java面試題及答案整理(2022最新版)

2.勁爆!Java 協程要來了。。。

3.Spring Boot 2.x 教程,太全了!

4.20w 程序員紅包封面,快快領取。。。

5.《Java開發手冊(嵩山版)》最新發布,速速下載!

覺得不錯,別忘了隨手點贊+轉發哦!