我有一个java POJO类,如下所示。
public class EmployeeVo {
private String firstName;
private String middleName;
private String lastName;
private String suffix;
private String addressline1;
private String addressline2;
private String city;
private String state;
private String zipCode;
private String country;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getMiddleName() {
return middleName;
}
public void setMiddleName(String middleName) {
this.middleName = middleName;
}
public String getLastName() {
return lastName;
}
.// Setters and getters for other fields.
.
.
}
有没有办法一次检查一个对象的所有字段是否为null,而不是检查每个字段是否为null?
从EmployeeVo对象
中检索这些值时public static boolean isEmpty(String string){
if(null==string || string.trim().length()==0){
return true;
}
return false;
}
我必须在使用它之前手动空检查每个字段。 由于上面的Object有10个以上的字段,显然会增加该方法的Cyclomatic Complexity。 对它有什么最佳解决方案吗?
if(CommonUtil.isNotEmpty(employeeVO.getCity())){
postalAddress.setCity(employeeVO.getCity());
}
if(CommonUtil.isNotEmpty(employeeVO.getCity())){
postalAddress.setState(employeeVO.getState());
}
if(CommonUtil.isNotEmpty(employeeVO.getZipCode())){
postalAddress.setPostalCode(employeeVO.getZipCode());
}
if(CommonUtil.isNotEmpty(employeeVO.getCountry())){
postalAddress.setCountryCode(employeeVO.getCountry());
}
我们可以使用
String country=employeeVO.getCountry();
postalAddress.setCountryCode( (country!=null) ? country: "");
只是为了降低复杂性?这是根据标准吗?
答案 0 :(得分:5)
调用者不负责决定是否设置字段,它应该是自己的方法。
在你的情况下,这意味着设置者必须决定参数的值是否设置。
这将一种方法的复杂性转移到单个单独的方法,从而降低了调用者的复杂性
答案 1 :(得分:1)
此代码不会减少CC。使用三元时,你仍然有一个分支。
String country=employeeVO.getCountry();
postalAddress.setCountryCode( (country!=null) ? country: "");
我想出了一个处理这个问题的简单方法。
ifNotBlank(String input, String output);
如果输入为空,则返回输出。如果输入不为空,则返回输入。因此,当应用于您的代码时,它看起来就像这样。
postalAddress.setCity(ifNotBlank(employeeVO.getCity(), ""));
postalAddress.setState(ifNotBlank(employeeVO.getState(), ""));
postalAddress.setPostalCode(ifNotBlank(employeeVO.getZipCode(), ""));
postalAddress.setCountryCode(ifNotBlank(employeeVO.getCountry(), ""));
ifNotBlank的代码看起来像这样。
import org.apache.commons.lang3.StringUtils;
public class ComplexityUtils{
public static String ifNotBlank(String input, String output){
return StringUtils.isBlank(input) ? output : input;
}
}