臥槽!!IntelliJ IDEA 居然偷偷改程式碼。。
問題
要瘋了,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最新版)
覺得不錯,別忘了隨手點贊+轉發哦!
- 有了 for (;;) 為什麼還需要 while (true) ? 到底哪個更快?
- 再見,Spring Security OAuth!!
- Spring Boot Vue Shiro 實現前後端分離、許可權控制
- Java 技術棧中介軟體優雅停機方案設計與實現全景圖
- Java 技術棧中介軟體優雅停機方案設計與實現全景圖
- JHipster:Java和JavaScript的全棧框架
- 面試官:Spring 註解 @After,@Around,@Before 的執行順序是?
- C 與Java“相愛相殺”:一個步步緊逼,一個節節敗退
- C 即將超越Java、360企業安全雲或將上線“一鍵強制下班”功能、Glibc增加面向Arm SVE優化的記憶體拷貝 ...
- 面向開發人員的映象和容器實踐指南
- 面試官:生成訂單 30 分鐘未支付,則自動取消,該怎麼實現?
- 臥槽!!IntelliJ IDEA 居然偷偷改程式碼。。
- 鑑權 5 兄弟:cookie、session、token、jwt、單點登入,終於有人說清楚了!
- 高逼格的 SQL 寫法:行行比較,別問為什麼,問就是逼格高。。
- 你見過最垃圾的程式碼長什麼樣?(來長長見識)
- 不捲了!技術團隊成員集體辭職
- 引爆全球的 Log4j2 核彈級漏洞,JNDI 到底是個什麼鬼?
- TIOBE 1月程式語言排行榜出爐:Python蟬聯冠軍,C和JAVA分列二三
- 再見,CentOS!2021/12/31 宣佈正式停服。。
- 基於 ElasticSearch 實現站內全文搜尋,寫得太好了!