![](/img/trans.png)
[英]How To Initialize final static data member with the method which throws Exception
[英]Initializing a final field in an enum, where the value is loaded through a method which throws an 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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.