【问题标题】:Replace Anonymous inner class by lambda用 lambda 替换匿名内部类
【发布时间】:2019-06-10 05:46:38
【问题描述】:

我收到一个 Sonar 建议,将白蛋白内部类更改为 lambda。

List<StsTxn> collect = externalPayments.stream().map(new Function<PaymentExternal, Payment>() {

            @Override
            public Payment apply(PaymentExternal t) {
                Payment payment = new Payment();
                try {
                    BeanUtils.copyProperties(payment, t);
                } catch (IllegalAccessException | InvocationTargetException e) {
                    logger.error(e.getMessage(), e);
                }
                return payment;
            }
        }).

【问题讨论】:

  • t -&gt; { Payment payment = new Payment(); try { BeanUtils.copyProperties(payment, t); } catch (IllegalAccessException | InvocationTargetException e) { logger.error(e.getMessage(), e); } return payment; } ?任何 IDE 都会推荐它,你使用哪一个?

标签: java lambda java-8 anonymous-class


【解决方案1】:

在 Java-8 中,JVM 会自动查找相关方法并覆盖它,但您只能将此特性用于函数式接口。

 public Payment createPayment(

    List<StsTxn> collect = externalPayments.stream().map(
    t -> {
    Payment payment = new Payment();
    try {
           BeanUtils.copyProperties(payment, t);
    } catch (IllegalAccessException | InvocationTargetException e) {
           logger.error(e.getMessage(), e);
    }
    return payment;
 })

【讨论】:

    【解决方案2】:

    如果您使用的是 IntelliJ Idea,那么按 Alt + Enter/Return 应该会自动将其转换为 lambda。

    如果您必须手动执行此操作,则如下:

    List<StsTxn> collect = externalPayments.stream().map( t -> {
        Payment = new Payment();
        //try-catch block
        return payment;
    });
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      相关资源
      最近更新 更多