是否应在java枚举中包含未知/默认值
对于最佳实践,是否最好让下面的代码与是否应在java枚举中包含未知/默认值,java,coding-style,enums,Java,Coding Style,Enums,对于最佳实践,是否最好让下面的代码与返回“red”一起模拟未知值?或者我应该添加一个unknown(“red”)选项并返回Shape.unknown.color?对于未知值的枚举是否有标准Java约定 private enum Shape { triangle("yellow"), square("green"), circle("red"); private final String color; Shape(String color) {
返回“red”
一起模拟未知值?或者我应该添加一个unknown(“red”)
选项并返回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,因此我会选择将实例传递到其中的静态方法
public static String getShapeColor(Shape shape) {
if(shape != null) {
return shape.color;
}
return "red";
}
你怎么会有一个未知的值?换句话说,它如何到达
返回“red”代码>行?@DanielKaplan,shape
正在从另一个服务传入,因此它可能为空。颜色将被用作网页显示的一部分,所以我们想要一个默认值,而不是500’ingOh我明白了,我看错了你的例子。我以为getShapeColor()
在枚举中。