我正在为工作场所中的某些 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)
由于您使用的是泛型,因此不清楚该函数的域是什么,
但假设它是 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 支持)。
| 归档时间: |
|
| 查看次数: |
2256 次 |
| 最近记录: |