java如何将参数化匿名类转换为lambda?
我想重构我的代码(Sonar也希望我这么做:))
我应该使用lambda而不是匿名类
我有以下代码:
@Component
public class InsuranceValidateRespDataToDtoMapper extends PropertyMapConfigurerSupport<InsuranceValidateResponseData,
com.package.InsuranceValidateResponseData> {
@Override
public PropertyMap<InsuranceValidateResponseData, com.package.InsuranceValidateResponseData> mapping() {
return new PropertyMap<InsuranceValidateResponseData, com.package.InsuranceValidateResponseData>() {
@Override
protected void configure() {
using(BIG_DECIMAL_TO_INTEGER_AMOUNT_CONVERTER).map(source.getLackCurr()).setLackCurr(null);
using(BIG_DECIMAL_TO_INTEGER_AMOUNT_CONVERTER).map(source.getLackEur()).setLackEur(null);
}
};
}
}
当我进行以下更改时,代码将无法编译
@Component
public class InsuranceValidateRespDataToDtoMapper extends PropertyMapConfigurerSupport<InsuranceValidateResponseData,
com.package.InsuranceValidateResponseData> {
@Override
public PropertyMap<InsuranceValidateResponseData, com.package.InsuranceValidateResponseData> mapping() {
return () -> {
using(BIG_DECIMAL_TO_INTEGER_AMOUNT_CONVERTER).map(source.getLackCurr()).setLackCurr(null);
using(BIG_DECIMAL_TO_INTEGER_AMOUNT_CONVERTER).map(source.getLackEur()).setLackEur(null);
};
}
}
编译失败,因为它无法解析“使用”和“源”
# 1 楼答案
在这里:
那里有两个回报-没有意义;去那一秒
只有;把你面前的其他东西拿走
但是这里的更重要的方面是:不要盲目地做事,因为一些工具告诉你这一点
相反:退后一步理解该工具告诉您的信息(例如:选项是什么;您是否真的相信“其他选项比您现在拥有的更好”)。当然,如果每个人都同意“我们想要0个警告”,那么这就是你可以做的。另一方面触摸代码时;正如所说的:不要盲目地去做。也许你可以退一步;甚至在这里进行更好的重构
(我并不是说这在这里是可能的;我只是指出:当您接触代码时,请确保您将提交的更改对您真正有意义)
# 2 楼答案
如果
PropertyMap
是函数接口,请尝试这样重写方法函数接口可以像lambda函数一样表示,在这种情况下,您只需要从函数接口为单个方法编写lambda函数。使用BiConsumer class的简单示例:
可以表示为lambda函数,只指定
accept
方法: