java - 如何将参数化匿名类转换为 lambda?

标签 java lambda java-8

我想重构我的代码(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”

最佳答案

这里:

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 警告”,那么这就是您可以做的。另一方面;触摸代码时;正如所说:不要盲目地做。也许你可以退后一步;甚至在这里进行更好重构。

(我并不是说这在这里是可能的;我只是指出:当您接触代码时;确保您将提交的更改对您来说真正有意义)。

关于java - 如何将参数化匿名类转换为 lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42582545/

相关文章:

python - 使用 Tkinter 的 'command = ' 中的 lambda 函数。

java - groovy 中的闭包与 java 8 中的闭包(lambda 表达式)?

java - 解析具有多个 Json 元素且没有逗号分隔的字符串

Java8 - 映射流而不收集性能

java - 为多个对象提供服务的 GWT 服务

带有 lambda fuctoin 的 python3 过滤器对象

java - 如何在java8中使用对象内的List属性进行groupingBy的groupingBy

java - 如何获取作为通用参数传递给 Java 函数的实体的字段?

java - SuperFloppyFormatter 对于超过 512 MB 的任何内容都会返回 FAT32?

java - ClassNotFoundException:config_inputEventCompatProcessorOverrideClassName androidx,在 andoridx 上运行崩溃