java – 当需要在每个setter中使用相同的条件运算符时,如何成为DRY?

所以我有一个类,其字段不能具有某些值.我在每个二传手中都设置了一个条件,但我不确定这是一个好主意,因为这与每个二传手中相同条件的“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);
}
上一篇:在java中使用逻辑的setter


下一篇:在setter php中输入Hinting vs Type Casting