这是关于最佳实践/风格的问题.
我有一个Printer类,可以打印出不同颜色的元素.使用Enum作为输入是否正确:
public class Printer {
public enum Color{RED, GREEN, BLUE}
public void print (Color color){
MyElement myElement = new MyElement();
switch (color) {
case RED:
myElement.setColor("#xxxxxx");
break;
case GREEN:
myElement.setColor("#xxxxxx");
break;
case BLUE:
myElement.setColor("#xxxxxx");
break;
}
myElement.print();
}
}
Run Code Online (Sandbox Code Playgroud)
然后从另一个类中调用该方法,如下所示:
Printer p = new Printer();
p.print(Printer.Color.RED);
Run Code Online (Sandbox Code Playgroud)
...或者将值添加到枚举中会更好:
public class Printer {
public enum Color {
RED("#xxxxxx"),
GREEN("#xxxxxx"),
BLUE("#xxxxxx");
private final String hex;
Color(String hex){
this.hex = hex;
}
public String getHex(){
return this.hex;
}
}
public void print (Color color){
MyElement myElement = new MyElement();
myElement.setColor(color.getHex());
myElement.print();
}
}
Run Code Online (Sandbox Code Playgroud)
...或者根本不使用枚举,只使用普通字符串?
我认为您的解决方案没有任何问题.我唯一建议的是在Enum上创建一个构造函数并将颜色值存储在那里.但这只是一个建议.
它会是这样的:
public class Printer {
public enum Color{
RED("#FF0000"), GREEN("#00FF00"), BLUE("#0000FF");
private String colorAsString;
private Color(String colorAsString) {
this.colorAsString = colorAsString;
}
public String getColorAsString() {
return this.colorAsString;
}
}
public void print (Color color){
MyElement myElement = new MyElement();
myElement.setColor(color.getColorAsString());
myElement.print();
}
Run Code Online (Sandbox Code Playgroud)
}