这是关于最佳实践/风格的问题。
我有一个可以打印出不同颜色元素的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();
}
}
然后只需从另一个类调用该方法:
Printer p = new Printer();
p.print(Printer.Color.RED);
...或者将这些值添加到枚举中会更好:
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();
}
}
...或者根本不使用枚举,只使用普通字符串?
答案 0 :(得分:5)
我发现您的解决方案没有任何问题。我唯一建议的是在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();
}
}
答案 1 :(得分:2)
在常量位置使用enum
通常是有意义的。如果应用程序像问题中解释的那样简单,只有1个参数(颜色值),使用字符串常量也很有效。
如果要使用enum
,则第二种方法(即通过enum
构造函数存储颜色值的方法)更可取。