所以我试图加载一个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;
}
}