我有一个用于jenkins管道的小项目,代码是用groovy编写的,我创建了一个enum,如下所示:
的全部目的是在函数中传递一个枚举并返回文件类型或文件扩展名所以我们可以重用其他文件类型的代码而不需要硬编码
enum FileExtension {
CSV, JSON, PROPERTIES;
static String getSrcFile(FileExtension fileExtension) {
String src_File = "./master.csv";
switch (fileExtension) {
case CSV:
src_File = "./master.csv";
break;
case JSON:
src_File = "./master.json";
break;
case PROPERTIES:
src_File = "./master.properties";
};
return src_File;
};
static String getFileFormat(FileExtension fileExtension) {
String fileFormat = "csv";
switch (fileExtension) {
case CSV:
fileFormat = "csv";
break;
case JSON:
fileFormat = "json";
break;
case PROPERTIES:
fileFormat = "properties";
};
return fileFormat;
};
}
我在下面使用它:
public class Hello {
public static void main(String[] ars) {
FileExtension fileExtension = FileExtension.JSON;
System.out.println(test(FileExtension.CSV));
}
public static String test(FileExtension fileExtension){
return fileExtension.getSrcFile(fileExtension);
}
}
我的问题有一种方法来避免通过测试方法中的文件扩展?你认为代码正确吗?
不要让这些方法变成静态的,给enum一个扩展名为
的属性enum FileExtension {
CSV("csv"), JSON("json"), PROPERTIES("properties");
private final String extension;
FileExtension(String extension) {this.extension = extension;}
public String getSrcFile() {
return "master." + extension;
}
public String getFileFormat() {
return extension;
}
}
enum FileExtension {
CSV, JSON, PROPERTIES;
public String getSrcFile() {
return "./master." + getFileFormat();
}
public String getFileFormat() {
return toString().toLowerCase();
}
}
要对所有枚举值进行测试,可以执行以下操作:
for (FileExtension fileExtension : FileExtension.values() ) {
// do your tests
}
如果你真的想有一个好的设计,不要把方法getSrcFile()
硬编码的名称&;master&;转化为enum代码。或者至少将此名称作为参数传递。