繁体   English   中英

如何避免许多if-else语句

[英]How to avoid many if-else statements

我有一个这样的班..

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条件作为什么。

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

假设一:
如果值初始化为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

我还想到了其他一些方法,但是如果没有更多上下文,它们在这一点上是没有用的。

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

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

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

会成为

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

您可以选择从POJO Student直接返回Optional的任何可能为null

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

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

如果getName看起来像:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM