2014-02-21 101 views
1

我有一個應用程序,它啓動時加載文件。當文件加載時,一些枚舉被初始化。當枚舉初始化時調用方法getTagGroupStartId。該方法採用可能存在或可能不存在於加載文件中的「標籤」的名稱。如果它不存在,則getTagGroupStartId返回-1重新加載Java枚舉

所有這一切都很好。加載另一個可能包含前一個文件不包含的「標記」的文件或者可能不包含前一個文件包含的「標記」時,會出現問題。在這兩種情況下,我需要更新枚舉中的m_tagId值,以便枚舉反映當前文件的值。我怎樣才能重新加載/重新初始化枚舉?

public enum ExampleEnum { 

    FOO("FOO_"), 
    BAR("BAR_"), 
    BAZ("BAZ_"); 

    private final String m_tagName; 
    private final int m_tagId; 

    ExampleEnum(String tagName) { 
     m_tagName = tagName; 
     m_tagId = Tag.getTagGroupStartId(tagName); 
    } 

    // ... 

} 
+0

爲什麼你在新行上放置右括號?這使得代碼非常不可讀。我花了10秒鐘才發現'{}'裏面的代碼是構造函數的一部分。 –

+0

枚舉在我的代碼中非常龐大,因此它更具可讀性。我從我的代碼複製它,並刪除了噪音,但沒有改變。現在修復它。 – ubiquibacon

回答

5

添加下面的方法到你的枚舉:

public static void refreshAll() { 
    for (ExampleEnum e : values()) { 
     e.m_tagId = Tag.getTagGroupStartId(e.m_tagName); 
    } 
} 

,並調用它,當你希望它刷新。

+0

並使'm_tagId'非'final':) –