java中的consumer的作用_java – 如何将简单的setter解释为Consumer?

首先,请耐心等待.大部分时间我在

Scala(有时只在JVM端)或其他语言工作,所以我的

Java(8)知识有点受限!

我必须重构的代码充满了空检查.我想让一些pojo的属性设置/覆盖更好一点,并且很高兴能够使用Java 8来完成工作.

所以我创造了这个:

private void setOnlyIfNotNull(final T newValue, Consumer setter) {

if(newValue != null) {

setter.accept(newValue);

}

}

并像这样使用它:

setOnlyIfNotNull(newUserName, user::setName);

junit4-test看起来像这样:

@Test

public void userName_isOnlyUpdated_ifProvided() {

User user = new User("oldUserName");

UserUpdateRequest request = new UserUpdateRequest().withUserName("newUserName");

service.updateUser(user, request); // This calls setOnlyIfNotNull behind the curtain. And it does invoke the setter ONLY once!

assertThat(user.getUserName()).isEqualTo("newUserName");

}

这很有效.在我请同事进行代码审查之前,我对自己很满意.在解释我做了什么之后,他详细说明了他认为这不起作用,因为函数仍然没有Java中的一等公民,而User-pojo没有扩展FunctionalInterface.接口也是在类级别而不是功能级别上提供的.

现在我想知道,为什么测试工作,我在这里滥用了什么? Naive me只是想象Java编译器知道setter的T setT(T值)签名与Consumer< T>相同.

编辑:详细说明:如果我将测试更改为失败,例如with assertThat(user.getUserName()).isEqualTo(“Something”);失败的比较失败如预期!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值