IntelliJ IDEA硬編碼字符串

2018-10-23 14:23 更新

IntelliJ IDEA 提取硬編碼字符串文字

啟用代碼檢查以突出顯示硬編碼字符串文字后,您可以繼續(xù)將這些文字解壓縮到屬性文件中。為此,IntelliJ IDEA 提供特殊意圖行為 i18nize 硬編碼字符串文本。

本節(jié)考慮兩種訪問(wèn)資源包的可能方法:

  • 使用 java.util.ResourceBundle 實(shí)用程序類
  • 使用自定義實(shí)用工具類

使用 java.util.ResourceBundle 提取硬編碼字符串文字

tip:您可以跳過(guò)此步驟,并在 I18nize 硬編碼字符串對(duì)話框中立即指定所需的資源包表達(dá)式。
  1. 指定將用于存儲(chǔ)提取的文字的資源包。特別地,您可以將以下語(yǔ)句添加到您的源代碼中:

    private static ResourceBundle <field name> =
    getBundle("<bundle name>");

    例如:

    private static ResourceBundle myBundle =
    getBundle("com.intellij.fontChooser.FontChooser");
  2. 單擊突出顯示的字符串,按 Alt+Enter,并在意圖行為列表中選擇 i18nize 硬編碼字符串:
    使用java.util.ResourceBundle提取硬編碼字符串文字
  3. 在"I18nize 硬編碼字符串"對(duì)話框中指定目標(biāo)屬性文件、屬性鍵和值以及資源包表達(dá)式。

    如果 ResourceBundle 字段已在源代碼中聲明(如步驟1所示),則 IntelliJ IDEA 在默認(rèn)情況下建議它的名稱。如果您尚未在源代碼中聲明此字段,您仍然可以在對(duì)話框中立即定義所需的表達(dá)式。為此,請(qǐng)?jiān)?"資源包表達(dá)式" 字段中輸入 ResourceBundle 類型的有效表達(dá)式。

    注意:基本代碼完成在該字段中工作。鍵入類名,并按下 Ctrl+Space ,選擇方法:

    使用java.util.ResourceBundle提取硬編碼字符串文字

    從建議列表中選擇所需的方法,然后再按 Ctrl+Space 一次以填寫括號(hào):

    使用java.util.ResourceBundle提取硬編碼字符串文字

    之后,在引號(hào)中鍵入包和資源包名稱:

    使用java.util.ResourceBundle提取硬編碼字符串文字
  4. 點(diǎn)擊“確定”。具有硬編碼字符串文字的行被替換。例如,如果源代碼中已經(jīng)聲明了資源包,則將創(chuàng)建以下行:
    使用java.util.ResourceBundle提取硬編碼字符串文字

    如果在對(duì)話框中定義了資源包,結(jié)果將是:

    使用java.util.ResourceBundle提取硬編碼字符串文字

使用自定義資源包類提取字符串文字

  1. 請(qǐng)確保 IntelliJ IDEA 安裝下的redist/annotations.jar歸檔文件被添加到模塊依賴關(guān)系中。
  2. 在項(xiàng)目中創(chuàng)建一個(gè)新類,并鍵入以下代碼:
    import org.jetbrains.annotations.PropertyKey;
    import org.jetbrains.annotations.NonNls;
    import java.util.ResourceBundle;
    import java.text.MessageFormat;
    public class I18nSupport {
                   @NonNls
                   private static final ResourceBundle bundle = ResourceBundle.getBundle ("com.intellij.FontChooser");
                   public static String i18n_str
                    (@PropertyKey(resourceBundle ="com.intellij.FontChooser")
                    String key,Object... params){
                    String value =bundle.getString(key);
                    if (params.length >0) return MessageFormat.format(value, params);
                    return value;
        }
    }
  3. 在包含硬編碼字符串的類中,單擊突出顯示的字符串,按 Alt+Enter,并在意圖行為列表中選擇 i18nize 硬編碼字符串文本。該 I18n-ize 字符串文字對(duì)話框顯示缺少資源包表達(dá)式:
    使用自定義資源包類提取字符串文字
  4. 點(diǎn)擊 "編輯 i18n 模板鏈接"。在 "文件模板" 對(duì)話框中,將 I18nized 表達(dá)式更改為指向自定義資源包類的方法:

    這個(gè)更改是全局性的,并且會(huì)影響所有項(xiàng)目!
    使用自定義資源包類提取字符串文字

    點(diǎn)擊“確定”,保存更新的模板并關(guān)閉對(duì)話框。

  5. 在"I18n-ize 字符串文本" 對(duì)話框的 "預(yù)覽" 部分中,請(qǐng)參閱建議的替換,然后單擊 "確定"。源代碼更改:
    使用自定義資源包類提取字符串文字

隱藏硬編碼字符串

有時(shí)你可能想隱藏硬編碼的文字。要這樣做,使用不需要國(guó)際化注釋。

  1. 按 Alt+Enter 顯示字符串文字的意圖行為:
    IntelliJ IDEA忽略硬編碼字符串
  2. 從"建議"列表中選擇注釋為 @NonNls。
  3. 在打開(kāi)的“選擇路徑”對(duì)話框中,指定annotations.xml 文件將被存儲(chǔ)的位置 。

或者,您可以添加 @NonNls 注釋:

IntelliJ IDEA忽略硬編碼字符串

如果您選中該復(fù)選框以后不顯示此對(duì)話框,則您仍然可以在“設(shè)置”對(duì)話框中選擇注釋樣式(代碼樣式 |Java 代碼生成)。

識(shí)別硬編碼字符串

您的源代碼可以包含您想要識(shí)別的硬編碼字符串,并進(jìn)一步提取到屬性。要在編輯器中突出顯示硬編碼的文字,請(qǐng)使用國(guó)際化代碼檢查。

  1. 打開(kāi) "設(shè)置" 對(duì)話框。
  2. 在項(xiàng)目設(shè)置,選擇 編輯|檢查(Editor | Inspections),打開(kāi) 檢查對(duì)話框。
  3. 選擇所需的配置文件,并找到節(jié)點(diǎn)國(guó)際化問(wèn)題。
  4. 請(qǐng)注意,您可以配置此檢查的嚴(yán)重性,并指定何時(shí)應(yīng)識(shí)別硬編碼的字符串。例如,您可以選擇跳過(guò)toString() 方法的內(nèi)容,或沒(méi)有字母字符的文字。

    檢查硬編碼字符串選項(xiàng),這將導(dǎo)致硬編碼字符串文字在編輯器中突出顯示。
  5. 應(yīng)用更改并關(guān)閉對(duì)話框?,F(xiàn)在編輯器將突出顯示硬編碼的字符串文字,如下所示:
    IntelliJ IDEA識(shí)別硬編碼字符串
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)