如何避免许多if-else语句

时间:2018-08-23 10:12:12

标签: java

我有一堂这样的课。

Class A {

    public void someNullCheckingMethod(Student stu) {

        if (stu.getName() != null) {
            String name = stu.getName();
        } else {
                // get name from other source(its something like 
                // fallback)
               }

        if (stu.getId() != null) {
            String id = stu.getId();
        } else {
                // get id from other source(its something like 
                // fallback)
               }

        if (stu.getAddress() != null) {
            String address = stu.getAddress();
        } else {
                // get address from other source(its something like 
                // fallback)
               }

        if (stu.getCity() != null) {
            String city = stu.getCity();
        } else {
                // get city from other source(its something like 
                // fallback)
               }

        if (stu.getGender() != null) {
            String gender = stu.getGender();
        } else {
                // get gender from other source(its something like 
                // fallback))
               }
    }
}

有没有一种方法可以避免过多的if语句?如您在这里看到的,我正在检查每个属性的空条件,但是我不希望很多检查都获得期望的结果,只是想减少条件是否满足以及希望获得相同的期望结果,无论我将所有这些if条件作为什么

3 个答案:

答案 0 :(得分:2)

由于您不提供任何上下文,因此您可以基于一些假设来做一些事情。

假设一:
如果值初始化为null

String name;
// or
String name = null;

然后,您可以只分配值,而忽略字段是否为空,因为类成员已经为空。

String name = stu.getName(); // String name = "Some Name" OR null, depending on return value of method

假设二:
如果只想避免使用if语句,则可以使用三元运算符

String name = stu.getName() != null ? stu.getName() : null; // Or some other default value

还有一些其他方法也浮现在我的脑海,但是在没有更多上下文的情况下,它们在这一点上没有用。

答案 1 :(得分:0)

如果可以选择使用外部库,则应该看看DozerMapStruct

答案 2 :(得分:0)

您至少可以使用Optional降低“详细程度”。

String name;
if (stu.getName() != null) {
    name = stu.getName();
} else {
    name = "default"
}

将成为

String name = Optional.ofNullable(stu.getName()).orElse("default");

您可以选择直接从POJO Optional返回Student,以获得可能为null的任何值。

这将提供更清洁的解决方案:

String name = stu.getName().orElse("default");

如果getName看起来像:

public Optional<String> getName(){
    return Optional.ofNullable(name);
}