常量和简化枚举值访问

时间:2011-09-15 00:02:03

标签: java enums

对于只有一个成员变量的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 个答案:

答案 0 :(得分:2)

为了简化它并仍保持安全,请使用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标准。

答案 1 :(得分:0)

以下似乎会更好用

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

答案 2 :(得分:0)

您可以拥有别名

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

    String getSound()
}


public static final Pet CAT = Pet.cat;

public static final String MEOW = Pet.cat.getSound();