一种优雅的说法,如果不为空,那么在 Java 6 中使用这个 setter 方法?

cg_*_*cg_ 4 java

我正在为工作场所中的某些 json 数据编写自定义反序列化器,我必须通过 setter 方法设置许多值,并且我只想在它们不为空时才这样做。

我可以通过将 setter 函数作为参数传递给另一个方法来在 Java 中执行此操作吗?

即伪代码:

private void setValue(Func setterMethod, <T> value){
    if (value != null){
        setterMethod(value);
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 5

如果您的 setter 是返回 void 的正确 setter,则必须使用 Consumer 而不是 Function。这只能从 Java 8 开始使用。

private <T> void updateValue(Consumer<T> setterMethod, T value) {
    if (value != null){
        setterMethod.accept(value);
    }
}
Run Code Online (Sandbox Code Playgroud)

这对于部分更新很有用。使用示例:

public Person partialUpdate(UUID id, Person update) {
    Person original = getPersonById(id);
    updateValue(original::setName, update.getName());
    updateValue(original::setAge, update.getAge());
    updateValue(original::setAddress, update.getAddress());
    return original;
}
Run Code Online (Sandbox Code Playgroud)


alf*_*sin 0

由于您使用的是泛型,因此不清楚该函数的域是什么,
但假设它是 T -> T您可以执行以下操作:

private <T> void setValue(Function<T, T> setterMethod, T value){
    if (value != null){
        setterMethod.apply(value);
    }
}
Run Code Online (Sandbox Code Playgroud)

也就是说,Java 6 不支持它(Java 8 支持)。