玩轉Eclipse — 自動程式碼規範化
大專案往往是有很多人一起完成的,然而每個人都有自己的style,導致整個專案的程式碼不僅存在不符合語言規範的情況,而且讀起來非常困難。因此,這樣的專案中都會引入Checkstyle,來規範大家的編碼風格,儘量做到統一和合理。我們在程式碼寫完之後,還要花時間去手動解決Checkstyle提示的問題,這是一個非常無聊和耗時的工作。下面介紹如何利用Eclipse配置,在我們寫完程式碼並儲存之後,Eclipse就會自動幫我們解決Checkstyle問題。
1. Formatter設定
Eclipse工具欄上選擇Window -> Preferences -> Java -> Code Style -> Formatter
Active profile中顯示的是當前正在使用的程式碼自動格式化配置。點選“Export All...”按鈕可以匯出Eclipse中的程式碼自動格式化配置,點選“Import...”按鈕可以匯入本地已有的配置檔案,匯入和匯出的檔案都是xml格式。可以點選“New...”按鈕,在Eclipse中的一個已有配置基礎上,新建一個自己的配置。
下面重點介紹如何進行程式碼自動格式化配置。點選“Edit...”按鈕,進入如下Formatter配置介面:
上面紅色框標記的選項卡中,是所有可以配置的選項。下面對每個選項卡大致可以設定的內容進行簡單介紹:
- Indentation縮排
Tab policy指定是否可以使用Tab鍵,有Spaces only(只支援空格鍵),Tabs only(只支援Tab鍵)和Mixed(同時支援空格鍵和Tab鍵)。為了保證程式碼在不同IDE和執行環境的相容性和一致性,強烈建議選擇Spaces only。Indentation size指定每次縮排多少個空格,Tab size指定一個Tab鍵相當於多少個空格。在Spaces only情況下,按Tab鍵,會自動轉化成對應數量的空格。
Align fields in columns指定屬性是否按列對齊。
Indent框中指定Java Code中常見元素是否縮排。
- Braces大括號
Braces positions指定Java Code中一些元素的大括號的位置,大概有Same line(同行),Next line(下行),Next line indented(下行縮排)等選擇。
- White Space空格
控制在Declarations、Control statements、Expressions、Arrays和Parameterized types這幾類元素中的相應位置插入空格。
- Blank Lines空行
控制class檔案中元素之間空行的數量,基本上採用預設值。
- New Lines新行
控制class檔案中元素是否插入新的一行。
- Control Statements控制語句
控制像if和else,do和while,以及try、catch和finally成套的控制關鍵字的位置。
- Line Wrapping換行
Maximum line width控制每行的最大字元數。
Default indentation for wrapped lines指定換行時縮排多少個空格。
還可以詳細控制class各元素是否換行。
- Comments註釋
對各種註釋(包括檔案頭註釋,行註釋,塊註釋,Javadoc註釋)進行格式設定。
2. Save Actions設定
進行Formatter設定後,你就可以使用Ctrl + Shift + F或者Source -> Format格式化選擇的程式碼。其實,還有一種更好的方法,在每次寫完程式碼並儲存class檔案的時候,自動格式化該檔案的程式碼。選擇Window -> Preferences -> Java -> Editor -> Save Actions進入如下介面:
選擇“Perform the selected actions on save”以及下面的三個複選框,其中“Format source code”就是根據前面設定的Formatter對Save檔案中的程式碼進行自動格式化,可以選擇僅針對修改過的程式碼還是針對所有程式碼。“Additional actions”是新增一些Save時的額外操作,可以點選“Configure...”按鈕對額外操作進行設定,設定介面如下:
- Code Organizing程式碼組織
可以設定刪除末尾的空格,正確的縮排,以及對成員進行排序。
- Code Style程式碼風格
可以設定控制語句和表示式,最重要的是還可以設定所有的parameter為final。
- Member Access成員訪問
設定是否需要this來訪問非static的屬性和方法,同時也可以設定static的屬性和方法。
- Missing Code遺漏程式碼
設定是否是否補齊遺漏的“@Override”和“@Deprecated”。
- Unnecessary Code不必要程式碼
刪除不必要的程式碼,例如:沒用的import,沒用的private成員,沒用的local變數等。