是否应在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()
在枚举中。