所以我尝试加载 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;
}
}
关于java - 初始化枚举中的最终字段,其中的值是通过抛出异常的方法加载的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26637498/