使用 if-else 语句的不同设计决策

Different design decisions with if-else-statements

您更喜欢以下哪一项:

    SomeEnum enum = SomeEnum.SOMETHING;
    if (aString.equals(anotherString)) {
        enum = SomeEnum.SOMETHING_ELSE;
    }
    return foo.bar(enum);

    if (aString.equals(anotherString)) {
        return foo.bar(SomeEnum.SOMETHING_ELSE);
    }
    return foo.bar(SomeEnum.SOMETHING);

我想我更喜欢第一个,因为它只有1点return。另一方面,我认为第二个更容易阅读。你怎么看?也许您有更复杂的解决方案。

这取决于我们谈论的项目数量:

对于大型枚举,我会保留一个从字符串到枚举对象的映射。我会在地图中查找项目并默认提供 SomeEnum.SOMETHING。

public SomeEnum get(String key, SomeEnum defaultValue){
    SomeEnum value = this.map.get(key);
    return value == null ? defaultValue : value;
}

对于较少的项目,我可能会使用 switch 语句:

public SomeEnum get(String key, SomeEnum defaultValue){
    switch(key){
        case "somevalue1" : return SomeEnum.SOME_VALUE_1;
        case "somevalue2" : return SomeEnum.SOME_VALUE_2;
        default: return defaultValue;
    }
}

但如果实际上只是问题中提到的两种情况,我会选择

return aString.equals(anotherString) ? SomeEnum.SOMETHING_ELSE : SomeEnum.SOMETHING;

没关系。像这样的简化可能会被编译器优化!您应该使用任何能让您的代码更具可读性的东西!