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

时间:2015-09-28 13:53:03

标签: java if-statement return

您更喜欢以下哪一项:

    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点回报。另一方面,我认为第二个更容易阅读。你怎么看?也许你有一个更复杂的解决方案。

2 个答案:

答案 0 :(得分:3)

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

对于一个大的枚举,我会保留一个从String到枚举对象的映射。我会在地图中查找该项目并提供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;

答案 1 :(得分:0)

这并不重要。这些简化可能会被编译器优化!你应该使用任何使你的代码更具可读性的东西!