对于最佳实践,使用return "red"
模拟未知值的代码是否更好?或者我应该添加一个unknown("red")
选项,然后做return Shape.unknown.color;
?是否有关于未知值的枚举的标准Java约定?
private enum Shape {
triangle("yellow"),
square("green"),
circle("red");
private final String color;
Shape(String color) {
this.color = color;
}
};
public String getShapeColor() {
if(shape != null) {
return shape.color;
}
return "red";
}
枚举是一种隐式变量,它不应该有未初始化的值。
实际上你的推理对每一种变量都是正确的,不仅仅是枚举,但在枚举的特定情况下,你声明的类型可以有有限数量的可能值,所以null
不应该是一个选项。
最好的解决方案确实是有一个未知的值:
private enum Shape {
TRIANGLE("yellow"),
SQUARE("green"),
CIRCLE("red"),
UNKNOWN("unknown");
private final String color;
Shape(String color) {
this.color = color;
}
};
并将Shape
类型的每个变量初始化为Shape.UNKNOWN
,以避免做任何null检查,这是一种null设计模式。当使用枚举时,这种模式更有意义。
注意:由于枚举表示常量,惯例是给它们大写的名字加上下划线。
假设,如果形状变量是未知的,那么它将为null,因此我将选择将实例传递给
的静态方法。public static String getShapeColor(Shape shape) {
if(shape != null) {
return shape.color;
}
return "red";
}