如何使用内部静态最终字段初始化Java枚举?

Rob*_*ino 4 java enums

我正在设计一个纯文本视频游戏,其中包含两个不常见的角色,但在内心和性格方面非常相似.

我的问题是我不知道如何enum使用静态最终内部常量通过构造函数初始化常量.否则游戏很不错.;)

这就是困境:

  1. 如果我没有弄错的话,枚举常量必须在枚举的第一行中定义
  2. 第一行不能引用它之后的任何内容(即"在定义之前无法引用字段")

我如何解决这个问题-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'!";
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用TYPICAL_QUOTE_FROM_MARIO初始化SUPERMARIO,但我还没有定义TYPICAL_QUOTE_FROM_MARIO.我想,在SUPERMARIO之前移动私有静态最终字段是非法的.

Bri*_*ian 8

唯一可行的选择是:a)将常量移动到另一个类或b)将常量直接放入值初始值设定项中.

如果移动常量,可以使类成为枚举中的静态类:

enum ValiantHeroWithPrincessSavingTendencies {
  SUPERMARIO(Quotes.TYPICAL_QUOTE_FROM_MARIO),
  ZELDA(Quotes.TYPICAL_QUOTE_FROM_ZELDA);

  private String aPreparedQuotePurportedToBeSpontaneousAlmostImpulsive;

  public String getQuoteUnderStressfulCircumstances() {
    return aPreparedQuotePurportedToBeSpontaneousAlmostImpulsive;
  }

  private ValiantHeroWithPrincessSavingTendencies(String quote) {
    aPreparedQuotePurportedToBeSpontaneousAlmostImpulsive = quote;
  }

  private static class Quotes {
    private static final String TYPICAL_QUOTE_FROM_ZELDA = "Have at ya!";
    private static final String TYPICAL_QUOTE_FROM_MARIO = "We, wagliu'!";
  }
}
Run Code Online (Sandbox Code Playgroud)


Vla*_*ich 5

您可以通过类名访问它们:

enum ValiantHeroWithPrincessSavingTendencies {
    SUPERMARIO(ValiantHeroWithPrincessSavingTendencies.TYPICAL_QUOTE_FROM_MARIO),
    ZELDA(ValiantHeroWithPrincessSavingTendencies.TYPICAL_QUOTE_FROM_ZELDA);

    ...

    private static final String TYPICAL_QUOTE_FROM_ZELDA = "Have at ya!";
    private static final String TYPICAL_QUOTE_FROM_MARIO = "We, wagliu'!";
}
Run Code Online (Sandbox Code Playgroud)

比Brian的解决方案简单