java - 常量和简化枚举值访问

标签 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 文件名文本所需的调用的长度(并且几乎减少了调用文件的文件名的语法冗余)。虽然这甚至可能不可行或不可取,但我很想知道它是否值得考虑。

谢谢。

最佳答案

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

关于java - 常量和简化枚举值访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7424417/

相关文章:

java - 日志信息显示在嵌入式 jetty 中,但当应用程序部署到 tomcat 时不显示

types - Swift:枚举依赖于另一个枚举

swift - 在集合上使用 Switch 语句 (Swift 3)

kotlin - 如何限制 Kotlin 中的枚举?

android - 在 Room 中编写基于某个枚举值进行选择的类型安全查询

java - 检查用户输入是否为 Int,无异常?

java - 如何使用源导入 org.eclipse.pde.internal?

java - (BouncyCasSTLe 错误 : min may not be greater than max ) implementation of El-Gamal algorithm using java

java - 在 java/mysql 中操作音频文件

typescript 。根据枚举输入参数返回不同的对象类型