就在前幾天,Java軟件開發神器 IDEA 2020.1 新版發佈了:
我第一時間在機子上更新並體驗了幾天,感覺還是有點香的!怎麼碩呢,體驗完新特性之後,不由的感嘆一句:IDEA現在真的是越來越智能,越來越懂開發者了。
UI/界面升級
1、界面支持中文了
漢化後的效果就是這個憨樣子:
各花入各眼,好壞就不做評判了,可以根據自己的喜好來調節。
必須要說的是,這個中文漢化不是軟件原生支持,而是需要下載安裝一個名為Chinese (Simplified) Language Pack的插件,好在這個插件就是JetBrains官方提供的
2、導航欄進化
現在代碼層級導航欄這裡,可以直接定位到文件中的某個具體方法或者字段了,這個的確很高效
3、支持編輯器內的Javadocs渲染
以前在IDEA中閱讀Javadoc非常不方便,因為處於原始狀態的Javadoc中含有各種標記,不好讀。這次新版的IDEA 2020新增了Javadocs的渲染功能,點擊左邊的小按鈕就可以啟用
渲染後的Javadoc就非常直觀易讀了,而且還可以調整字號
4、新增主題和字體
首先默認支持了JetBrains自家的新JetBrains Mono字體,這沒啥可說的,之前就體驗過了,詳細可參考前文《試水JetBrains官方新編程字體,真香!》
然後則是採用了統一的IntelliJ Light主題,而且該主題已經在不同的操作系統中完全統一了
喜不喜歡看大家個人習慣了。
5、船新的LightEdit模式
LightEdit,顧名思義,輕量級的代碼編輯。
是的,這次更新的IDEA支持打開單個代碼文件進行編輯,而無需打開整個項目。文件可以在單獨的編輯窗口打開,而且該窗口可以和其他(項目)窗口共存。就像這樣:
更強大的是,直接支持快捷打開這個單文件所在的完整項目:
甚至還可以通過命令行來打開單文件,這相當可以了:
6、支持“禪”模式
現在的這個代碼展示模式有夠豐富了,支持四種了:
當然,禪模式是最徹底的,一開這個模式,整個世界都清淨了...
7、終端支持分欄了
現在可以隨意地將IDEA自帶的終端進行橫豎分欄,非常方便
支持直接IDEA裡安裝JDK和Git
很多小夥伴交流說自己JDK環境好像裝的有問題,實驗各種出問題。為了這個事,強迫症都快犯了,很煩。
從IntelliJ IDEA 2020.1開始,我們可以直接在創建項目時,直接從IDEA上下載並設置JDK環境,很方便了。
我特地實驗了一下,在IDEA裡面下載安裝了個Open JDK 14,沒毛病,好用,切換也很方便。
除此之外,IDEA還直接支持Git的安裝,i了i了
支持Java 14新特性
前段時間Java 14發佈,加入了一些新特性,這次IDEA 2020.1迅速跟進,支持了Java 14的一些新特性,舉兩個典型的例子。
1、instanceof用法增強
老的Java版本中,對於instanceof語法,我們一般都是這樣用的:
<code>private void test( Object obj ) {
if( obj instanceof String ) {
String str = (String) obj; // 需手動強制轉換!
System.out.println( str.isEmpty() );
}
}/<code>
而Java 14對instanceof用法做了增強,我們藉助全新的IDEA 2020,可以快捷的將上面的代碼自動重構成如下所示:
所以最終變成了這個亞子:
<code>private void test( Object obj ) {
if( obj instanceof String str ) { // 校驗通過,直接後面定義變量,無需強轉!
System.out.println( str.isEmpty() );
}
}/<code>
2、record新語法支持
Java 14新增了record新語法,record的詞面意思就是 “記錄”,主要用於形式化的固定記錄,這在以前主要就是通過 不可變類來實現的,舉個例子吧。
比如我們定義一個不可變的日誌記錄類LogRecord,裡面包含日誌ID(id),日誌時間(date),日誌詳情(detail),按照老的做法,只能使用class進行定義:
<code>public final class LogRecord { // 不可變類
private final int id;
private final LocalDate date;
private final String detail;
public LogRecord(int id, LocalDate date, String detail) {
this.id = id;
this.date = date;
this.detail = detail;
}
public int getId() {
return id;
}
public LocalDate getDate() {
return date;
}
public String getDetail() {
return detail;
}
@Override
public String toString() {
return "LogRecord{" +
"id=" + id +
", date=" + date +
", detail='" + detail + '\\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
LogRecord logRecord = (LogRecord) o;
return id == logRecord.id &&
Objects.equals(date, logRecord.date) &&
Objects.equals(detail, logRecord.detail);
}
@Override
public int hashCode() {
return Objects.hash(id, date, detail);
}
}/<code>
Java 14認為上面這種final類型class的定義的套路是完全固定的,寫了很多固定套路的代碼,包括:構造函數、Getter方法、toString()方法、hashCode() 和 equals()方法等等,十分無聊。
為此Java 14推出了全新的record語法,只需一行代碼即可搞定,十分方便:
<code>record LogRecord( int id, LocalDate date, String detail ) {
}/<code>
這次IDEA 2020中就已經完全支持recod語法了,並且還可以自動顯式地為record生成各種方法:
支持更加智能的檢查和重構
1、支持就地更改方法簽名
什麼意思呢?舉個例子。
當你想直接修改某個已有方法的參數時,不管三七二十一,上來可以直接修改方法簽名,然後點擊更新,接下來的所有步驟IDEA可以幫你完成。
2、智能分析日期字符串格式
比如這個例子中,我格式化一個日期時,無意將年月日yyyy/MM/dd字符串寫成了yyyy/mm/dd,中間的MM大小寫忘了,IDEA自動給我們分析出來了:
3、智能語法和拼寫檢查器
這個功能得配合Grazie這個插件一起使用,該插件是一個全面的語法、拼寫、以及樣式檢查工具。
比如,這地方我小手一抖,寫錯了英語語法,它立馬幫我們提示出來了
增強調試功能
1、數據流分析輔助,可以直接預測下面的運行結果
IDEA 2020.1直接將數據流分析添加到JVM調試器。當程序在斷點處停止時,IDEA可以根據程序的當前狀態運行數據流分析,來預測下一步將要發生什麼。
2、調試時,支持固定對象字段
當一個對象字段過多,以致於調試時很難找到需要的字段時,我們可以直接將其置頂,便於查看。
3、以文件形式存儲運行配置
新版IDEA支持直接將當前的調試/運行的配置存檔,並在以後選擇重新加載
更加先進的版本控制
第一個大的改進就是重新設計了代碼提交的窗口,而不再是以前老的那種模態化彈窗式窗口了。這樣一來,提交代碼時的代碼比對,編輯會更加舒適。
第二個改進就是支持搜索、刷新本地以及遠端的代碼分支:
另外,這個歷史日誌留痕也是蠻好看的:
Maven和Gradle導入更新
此處就以Maven工具為例,編輯器右上角出現的是一個浮動通知。修改構建文件後,可以使用這個迷你的通知圖標來加載更改。
數據庫處理增強
新版IDEA內置的數據庫管理,現在可以支持將數據導出到Excel(.xlsx)文件,並且直接在編輯器中以文本形式查看
增強的HTTP Client
升級之後的HTTP Client更加智能,典型的比如:支持自動匹配和補全
而且還可以在Contoller代碼的左側,通過快捷的方式來自動生成HTTP請求文件
而且對於Spring項目,還可以在底部的Endpoints窗口裡來快捷生成HTTP請求文件。
其他改進
1、對各種框架的支持改進,比如:Spring WebFlux/Selenium/JMS/Micronaut/RxJava等等
2、對Docker/Kubernetes的支持改進
3、對Scala 3的支持
4、對Android Volley的支持
5、對JavaScript的改進和支持
小結
體驗一番之後發現,新版的IDEA 2020.1肉眼可見的改進還是非常多的,挺香。
不過還有一個實際的問題就是:我一升級之後發現一大票的插件都不能用了,所以周邊支持的兼容性還得再等等。
閱讀更多 CodeSheep 的文章