Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当每个设定器都需要相同的条件运算符时,如何保持干燥?_Java_Dry_Setter - Fatal编程技术网

Java 当每个设定器都需要相同的条件运算符时,如何保持干燥?

Java 当每个设定器都需要相同的条件运算符时,如何保持干燥?,java,dry,setter,Java,Dry,Setter,所以我有一个类,它的字段不能有特定的值。我在每一个二传手上都设置了一个条件,但我不确定这是否是一个好主意,因为这是相同的“如果”,每个二传手都有相同的条件。下面是setter(java)的示例: 为该逻辑编写一个静态方法: public static boolean isEmpty (String input) { return input == null || input.equals("-1") || input.equals("0") || input.equals("N/A");

所以我有一个类,它的字段不能有特定的值。我在每一个二传手上都设置了一个条件,但我不确定这是否是一个好主意,因为这是相同的“如果”,每个二传手都有相同的条件。下面是setter(java)的示例:


为该逻辑编写一个静态方法:

public static boolean isEmpty (String input) {
    return input == null || input.equals("-1") || input.equals("0") || input.equals("N/A");
}
并在每个setter中使用它:

public void setBuildingNumber(String buildingNumber) {
    this.buildingNumber = isEmpty(buildingNumber) ? null : 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;
}

嗯,既然他们已经给出了解决方案,我只想提醒你,你最好换个新的

buildingNumber.equals("-1")


只是如果它是空的/p>如果条件真的是相同的检查,即0,- 1,n/a在永远设置器,你可能会考虑一个微小的私有函数,返回一个布尔值。我会根据你的二传手的数量来权衡这个选择,以确保你不会过于复杂。谢谢。我已经放了很多“如果”来检查空值。我想我会做一些重构。

static Function<String, String> getValidBuildingNumber = createValidator(
    s -> !"0".equals(s) && !"1".equals(s) && !"N/A".equals(s), null);
public void setBuildingNumber(String buildingnumber) {
    this.buildingnumber = getValidBuildingNumber.apply(buildingnumber);
}
buildingNumber.equals("-1")
"-1".equals(buildingNumber)