我正在設計一個純文本視頻遊戲,兩個角色並不常見在一起,但在心臟和性格上非常相似。如何使用內部靜態final字段初始化Java枚舉?
我的問題是,我不知道如何通過使用靜態最終內部常量的構造函數初始化一個enum
常量。否則,這場比賽很好。 ;)
這裏的兩難境地:
- 枚舉常量必須在枚舉的第一行中定義,如果我沒有記錯
- 第一行不能引用後,任何未來(即「在定義之前不能引用字段」)
如何解決這個catch-22問題?
這裏下的非公開協議從遊戲中發佈了一些示例代碼:
enum ValiantHeroWithPrincessSavingTendencies {
SUPERMARIO(TYPICAL_QUOTE_FROM_MARIO), ZELDA(TYPICAL_QUOTE_FROM_ZELDA);
private String aPreparedQuotePurportedToBeSpontaneousAlmostImpulsive;
public String getQuoteUnderStressfulCircumstances() {
return aPreparedQuotePurportedToBeSpontaneousAlmostImpulsive;
}
private ValiantHeroWithPrincessSavingTendencies(String quote) {
aPreparedQuotePurportedToBeSpontaneousAlmostImpulsive = quote;
}
private static final String TYPICAL_QUOTE_FROM_ZELDA = "Have at ya!";
private static final String TYPICAL_QUOTE_FROM_MARIO = "We, wagliu'!";
}
我試圖用SUPERMARIO TYPICAL_QUOTE_FROM_MARIO,但我還沒有定義TYPICAL_QUOTE_FROM_MARIO尚未初始化。我想,在SUPERMARIO之前移動私有靜態最終字段是非法的。
我說simplier,只是反過來這樣做。但是你把這些領域變成了「私人」。他們怎麼會有用?這一切背後的功能需求/設計考慮是什麼? – BalusC
爲什麼不把字符串放在枚舉構造函數中,而不是有一個無用的(私有)靜態final字段呢?像這樣:'SUPERMARIO(「有在你!」),...' – aymeric
@BalusC ...但它是_Object-oriented_ :-) –