对于只有一个成员变量的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
文件名文本所需的调用的长度(以及调用文件文件名的语法冗余)。虽然这可能甚至不可行或不可取,但我很想知道是否值得考虑。
感谢。
答案 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();