2014-02-21 100 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':) –