据我了解,您可以在enum
内放置基本上任何类型的对象,这包括BufferedImage
。
这意味着创建enum
如下所示应该起作用:
A(0 , ImageIO.read(new File("a.png")) , "foo" , true),
B(1 , ImageIO.read(new File("b.png")) , "" , true);
问题是, 以这种方式创建BufferedImage
来捕获任何异常。
现在我的问题是:
可以在try/catch
的声明中放置enum
,或者我应该保留文件名并在请求时传递实际的BufferedImage
?
答案 0 :(得分:7)
你的枚举声明已经需要一个构造函数,你可以在其中捕获并处理所有异常。
public enum ImageEnum {
A(0 , "a.png" , "foo" , true),
B(1 , "b.png" , "" , true);
private final BufferedImage image;
private ImageEnum(.., String filename, ..) {
// first assign to tempImage to meet teh final modifier of image
BufferedImage tempImage = null;
try {
tempImage = ImageIO.read(new File(filename));
} catch (Exception e) {
tempImage = null;
}
image = tempImage;
}
}
答案 1 :(得分:3)
如果您创建了一个加载图像并返回它的方法,从而捕获任何异常,并且您可以传递文件的路径,该怎么办?所以你的代码看起来像这样:
A(0 , loadImage("a.png"), "foo" , true),
B(1 , loadImage("b.png"), "" , true);
如果你像我一样喜欢把事情分成很多方法,这只是另一种选择。