如何在Java中使用枚举来保存图像?

时间:2015-02-25 17:02:51

标签: java enums bufferedimage javax.imageio

据我了解,您可以在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

2 个答案:

答案 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);

如果你像我一样喜欢把事情分成很多方法,这只是另一种选择。