5

对于最佳实践,最好使用下面的代码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";
}
4

2 回答 2

9

枚举隐含地是一种不应该具有未初始化值的变量。

实际上,您的推理对于每种变量都是正确的,不仅是枚举,而且在枚举的特定情况下,您声明的类型可以具有有限数量的可能值,因此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以避免进行任何空检查,这是一种空设计模式。在使用枚举时,这种模式更有意义。

注意:由于枚举表示常量,因此约定是给它们加上下划线的大写名称。

于 2013-01-08T02:06:40.450 回答
0

据推测,如果形状变量未知,它将为空,所以我会选择一个静态方法,您将实例传递给

public static String getShapeColor(Shape shape) {
    if(shape != null) {
        return shape.color;
    }
    return "red";
}
于 2013-01-08T02:14:20.620 回答