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

The*_*ous 3 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);
Run Code Online (Sandbox Code Playgroud)

问题是你必须通过这种创建方式捕获任何异常BufferedImage.

现在的问题是:
是可以放置一个try/catch 内部的申报enum,或者我应该只是按住文件名,并通过实际的BufferedImage真实被请求的时候吗?

Uli*_*Uli 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;
   }

}
Run Code Online (Sandbox Code Playgroud)

  • @Uli:请注意,使用当前示例,您将收到编译器错误.在您的捕获图像中可能已经分配了,但它是最终的,因此您无法再次分配它.我建议为`image`添加一个虚拟变量来防止这种情况. (2认同)