如何避免 Java 中的多个 If 语句?

How to avoid multiple If Statements in Java?

如何重构这个方法?

public String getFirstOrLastNameOrBoth() {
    if (this.getFirstname() != null && this.getLastname() != null) {
        return this.getFirstname() + this.getLastname();
    } else if (this.getFirstname() != null && this.getLastname() == null){
        return this.getFirstname();
    } else if (this.getLastname() != null && this.getFirstname() == null){
        return this.getLastname();
    }
    return 0.0;
}
    public String getFirstOrLastNameOrBoth() {
        return (getFirstname() == null ? "" : getFirstname()) 
             + (getLastname() == null ? "" : getLastname());
    }
public String getFirstOrLastNameOrBoth() {
    if(this.getFirstname() == null && this.getLastname() == null) {
        return "0.0";
    }
    
    return (this.getFirstName() != null ? this.getFirstName() : "") +
            (this.getLastname() != null ? this.getLastname() : "");
}
if (this.getFirstname() != null && this.getLastname() != null) {
   return this.getFirstname() + this.getLastname();
} else {
   return Optional.ofNullable(this.getFirstname()).orElseGet(() -> Optional.ofNullable(this.getLastname()).orElseGet(() -> "0.0"));
}
  1. 如无必要,请不要使用 this
  2. 使用库方法处理字符串。

StringUtils.trimToEmpty() 来自 Apache Commons org.apache.commons.lang3 可以在这里使用

    public String getFirstOrLastNameOrBoth() {
        return trimToEmpty(getFirstname()) + trimToEmpty(getLastname());
    }

无需在 class 中调用 getter 即可访问字段。请改用字段名称。

而不是 null-checks,您可以使用 Objects 实用程序的 noneNullOrElse() 静态方法 class。

return Objects.requireNonNullElse(firstName, "") +
       Objects.requireNonNullElse(lastName, "");

您可以做的另一件事是将 if 语句转移到 get 方法中,这样您就可以在那里检查某些内容是否为 null。更具体地说:

 public String getFirstname() {
    if (firstname != null){
    return firstname;}

    return "";
}

public String getLastname() {
    if (lastname!= null){
        return lastname;}

    return "";
}
public String getFirstOrLastNameOrBoth() {
   return (getFirstname() + " " + getLastname()).trim();
}

这种方式称为 extract 方法,在这种情况下,您不仅可以在最后一个方法中检查 null,还可以在 getter 中检查。因此我认为它是安全的。我还使用了 trim 方法来删​​除开头的空格,以防名字为空。