所以我试图在内部枚举中加载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;
}
}
我不想使用这种方法,原因有两个。首先,它比看似必要的更冗长。但更重要的是,它创造了一个冗余常数。当应该通过HAPPY_IMAGE
访问图像时,没有理由State.HAPPY.getImage()
。
以下内容有效,但我无法为每个枚举值指定不同的值。
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
值的加载?
答案 0 :(得分:4)
枚举可以有一个构造函数。 所以你可以在那里装货。
public enum State {
HAPPY("path/image.gif");
private final Image image;
private State(String path)
{
this.image = ...
}
public Image getImage()
{
return image;
}
}