所以我有一个类,其字段不能具有某些值.我在每个二传手中都设置了一个条件,但我不确定这是一个好主意,因为这与每个二传手中相同条件的“if”相同.这里是setter(java)的例子:
public void setBuildingNumber(String buildingNumber) {
if (buildingNumber.equals("-1") || buildingNumber.equals("0") || buildingNumber.equals("N/A")) {
this.buildingNumber = null;
} else {
this.buildingNumber = buildingNumber;
}
}
解决方法:
您可以创建一个验证方法,如果失败则返回默认值,即
private static String getValidValue(String candidate) {
return (candidate.equals("-1") || candidate.equals("0") || candidate.equals("N/A") ? null : candidate;
}
这将使你的二传手
public void setBuildingNumber(String buildnumber) {
this.buildnumber = getValidValue(buildnumber);
}
到目前为止,这与其他答案几乎相同.
如果有效值不同,您可以创建验证工厂方法.
private static <T> Function<T,T> createValidator(Predicate<T> valid, T defValue) {
return s -> valid.test(s) ? s : defValue;
}
然后将这样的验证器放在一起
static Function<String, String> getValidBuildingNumber = createValidator(
s -> !"0".equals(s) && !"1".equals(s) && !"N/A".equals(s), null);
要在你的setter中使用,如下所示:
public void setBuildingNumber(String buildingnumber) {
this.buildingnumber = getValidBuildingNumber.apply(buildingnumber);
}