编码风格——你应该在java枚举中包含未知/默认值吗?



对于最佳实践,使用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";
}

相关内容

最新更新