如何避免 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"));
}
- 如无必要,请不要使用
this
。
- 使用库方法处理字符串。
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 方法来删除开头的空格,以防名字为空。
如何重构这个方法?
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"));
}
- 如无必要,请不要使用
this
。 - 使用库方法处理字符串。
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 方法来删除开头的空格,以防名字为空。