Константы и упрощение доступа к перечислимым значениям - PullRequest
2 голосов
/ 15 сентября 2011

Для enum только с одной переменной-членом, существует ли более простой (и передовой опыт) способ доступа к ней без использования метода доступа? В качестве альтернативы я рассмотрел использование public static final переменных в классе констант, но чем больше я читаю, тем больше людей предлагают использовать enum в качестве способа инкапсуляции этих значений.

Чтобы попытаться проиллюстрировать, что я имею в виду, я включил следующий пример:

public enum FILE_NAME {

   MAIN("MAIN.TXT"),
   ATTACHMENT("ATTACHMENT.TXT"),
   OTHER("OTHER.HTM");

   private String fileName;

   FILE(String fileName) {
     this.fileName = fileName;
   }

   public String getfileName() {
     return fileName;
   }
}

Я бы тогда обычно обращался к этому значению так:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(bos);

// Add file
zip.putNextEntry(new ZipEntry(FILE_NAME.MAIN.getFileName()));

Для моего конкретного случая использования я бы предпочел получить доступ к имени файла с помощью вызова, подобного:

...
zip.putNextEntry(new ZipEntry(FILE_NAME.MAIN));

При этом код уменьшает длину (и почти синтаксическую избыточность вызова имени файла в файле) вызова, необходимого для доступа к тексту MAIN имени файла. Хотя это может быть даже неосуществимо или нежелательно, мне любопытно узнать, стоит ли это учитывать.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 15 сентября 2011

Чтобы упростить и сохранить его безопасно , используйте поле public final String для имени файла:

public enum FileType {
    MAIN("MAIN.TXT"),
    ATTACHMENT("ATTACHMENT.TXT"),
    OTHER("OTHER.HTM");

    // Name in all-caps to make it look like the constant it is
    public final String FILENAME;

    private FileType(String fileName) {
       this.FILENAME = fileName;
    }
}

Чтобы использовать это:

zip.putNextEntry(new ZipEntry(FileType.MAIN.FILENAME));

Обратите внимание, что изменение имени класса на "FileType" для лучшего соответствия стандартам Java.

0 голосов
/ 15 сентября 2011

Вы можете иметь псевдонимы

enum Pet
{ 
    cat("meow"), 
    dog("woof") 

    String getSound()
}


public static final Pet CAT = Pet.cat;

public static final String MEOW = Pet.cat.getSound();
0 голосов
/ 15 сентября 2011

Кажется, что следующее будет работать лучше

public enum FILE_NAME {

   MAIN("MAIN.TXT"),
   ATTACHMENT("ATTACHMENT.TXT"),
   OTHER("MAIN.TXT");

   private String fileName;

   FILE(String fileName) {
     this.fileName = fileName;
   }

   public void putEntry ( ZipOUtputStream zip )
   {
         zip.putNextEntry(new ZipEntry(this.getFileName()));
   }

   public String getfileName() {
     return fileName;
   }
}

Тогда вы можете использовать его как:

FILE_NAME.MAIN.putEntry(zip);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...