我想重构我的代码(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);
};
}
}
编译失败,因为它无法解析“using”和“source”
答案 0 :(得分:4)
下面:
return new PropertyMap<InsuranceValidateResponseData, com.package.InsuranceValidateResponseData>() {
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);
};
}
那里有两个回报 - 没有意义;去那第二个
return -> { ... }
仅;并删除你面前的其他东西!
但更多重要方面在这里:不要盲目地做 因为某些工具告诉你这样做。
相反:退一步; 了解该工具告诉您的内容(例如:有哪些选项;您是否真的购买“其他选项比您现在拥有的更好”)。当然,如果每个人都同意“我们想要0 SonarQube警告”,那么这就是你能做的。另一方面;触摸代码时;如上所述:不要盲目地做。也许你可以退后一步;甚至在这里进行更好重构。
(我不是说这在这里是可行的;我只是指出:当你触摸你的代码时;确保你提交的改变对你来说真的很有意义。)
答案 1 :(得分:1)
如果PropertyMap
是功能界面
@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);
};
}
功能接口可以表示为lambda函数,在这种情况下,您只需要从功能接口为该单个方法编写lambda函数。 BiConsumer class的简单示例:
BiConsumer<String, String> getConsumer() {
return new BiConsumer<String, String>() {
@Override
public void accept(String s, String s2) {
// accept strings
}
};
}
可以表示为lambda函数,仅指定accept
方法:
BiConsumer<String, String> getConsumer() {
return (s, s2) -> {
// accept strings
};
}