臥槽!!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開發手冊(嵩山版)》最新發布,速速下載!

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