初始化枚举中的最后一个字段,通过抛出Exception的方法加载该值



所以我试图加载一个Image作为内部枚举中常量的一部分。类似以下内容:

public enum State {
    HAPPY, SAD; 
    private final Image image;
}

目前,我已经从一个外部常量和一个静态初始化器加载了它,如下所示:

private static final Image HAPPY_IMAGE;
static {
    Image happyImage = null;
    try {
        happyImage = ImageIO.read(new File("path/to/file.gif"));
    }
    catch(IOException ioe) {
        LOGGER.fatal("Failed to load image.");
    }
    HAPPY_IMAGE = happyImage;
}
public enum State {
    HAPPY (HAPPY_IMAGE);
    private final Image image;
    private State(Image image) {
        this.image = image;
    }
}

不过,我不想使用这种方法,原因有两个。首先,它比看起来必要的要详细一些。但更重要的是,它创建了一个多余的常量。当应该通过State.HAPPY.getImage()访问图像时,没有理由使用HAPPY_IMAGE

以下是有效的,但我不能为每个枚举值分配不同的值。

public enum State {
    HAPPY;
    private final Image image;
    {
        Image image = null;
        try {
            image = ImageIO.read(new File("path/to/file.gif"));
        }
        catch(IOException ioe) {
            LOGGER.fatal("Failed to load image.");
        }
        this.image = image;
    }
}

那么,有什么方法可以完成枚举的final值的加载吗?

枚举可以有一个构造函数。所以你可以在那里装货。

public enum State {
  HAPPY("path/image.gif");
  private final Image image;     
  private State(String path)
  {
      this.image = ...
  }
  public Image getImage()
  {
      return image;
  }
}

相关内容

  • 没有找到相关文章

最新更新