2015-02-25 5 views
3

Насколько я понял, вы можете поместить в основном любой объект внутри enum, это будет включать BufferedImage.
Это означало бы, что создание enum следующим образом должно работать:Как сохранить изображение в перечислении в Java?

A(0 , ImageIO.read(new File("a.png")) , "foo" , true), 
B(1 , ImageIO.read(new File("b.png")) , "" , true); 

Проблема заключается в том, что вы есть поймать каких-либо исключений с этим способом создания BufferedImage.

Теперь мой вопрос:
ли можно разместить try/catchвнутри декларацию enum, или я должен просто держать имя файла и передать фактические BufferedImage, когда он запрашивается?

ответ

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

Вероятно, лучше всего, чтобы хотя бы зарегистрировать исключение, если вы его поймаете. – yshavit

+0

С этим я предполагаю, что перечисление будет выглядеть примерно так: 'A (0," a.png "," foo ", true)' –

+0

@yshavit: Да, лучше всего регистрировать исключение. Но это не является частью вопроса, и это зависит от вашей системы ведения журнала. – Uli

3

Что делать, если вы сделали метод, который загружается изображение и вернул его, тем самым ловить каких-либо исключений, и вы могли бы пройти путь к файлу. Таким образом, ваш код может выглядеть так:

A(0 , loadImage("a.png"), "foo" , true), 
B(1 , loadImage("b.png"), "" , true); 

Это еще один вариант, если вы похожи на меня и хотели разделить вещи на множество методов.