您需要分析重复的代码并将其重构为可重用的方法。
鉴于你原来的 sn-p,
public boolean isVoNotNull() {
return null != this.cardNo && StringUtils.isNotBlank(this.cardNo)
&& null != this.otp && StringUtils.isNotBlank(this.otp)
&& null != this.password && StringUtils.isNotBlank(this.password)
&& null != this.userid && StringUtils.isNotBlank(this.userid)
&& null != this.type && StringUtils.isNotBlank(this.type)
&& null != this.walletMobileNo && StringUtils.isNotBlank(this.walletMobileNo);
}
我们可以识别出以下重复部分:
null != this.xxx && StringUtils.isNotBlank(this.xxx)
鉴于StringUtils#isNotBlank() already 检查null,我们可以进一步简化它。
StringUtils.isNotBlank(this.xxx)
鉴于您需要多次调用它,最好将其重构为采用variable number of arguments 的方法,该方法在循环中检查它们。
public static boolean isNoneBlank(String... strings) {
for (String string : strings) {
if (!StringUtils.isNotBlank(string)) {
return false;
}
}
return true;
}
或者,如果您已经在使用 Streams and Lambda 支持的 Java 8:
public static boolean isNoneBlank(String... strings) {
return Arrays.stream(strings).allMatch(StringUtils::isNotBlank);
}
现在你可以像下面这样使用它了:
public boolean isVoNotNull() {
return isNoneBlank(this.cardNo, this.otp, this.password, this.userid, this.type, this.walletMobileNo);
}
您可以通过删除不必要的 this 来进一步减少样板文件。
public boolean isVoNotNull() {
return isNoneBlank(cardNo, otp, password, userid, type, walletMobileNo);
}
这一切都是Don't Repeat Yourself (DRY) 软件工程原理的应用。
也就是说,正如msandiford 指出的那样,事实证明Apache Commons Lang StringUtils 自3.2 版以来already 正是这种方法。因此,如果您还没有,请考虑将 Apache Commons Lang 升级到至少 3.2。
public boolean isVoNotNull() {
return StringUtils.isNoneBlank(cardNo, otp, password, userid, type, walletMobileNo);
}