【问题标题】:Does Lambda completely demolish the usage the anonymous inner class from java 8?Lambda 是否完全废除了 java 8 中匿名内部类的使用?
【发布时间】:2020-03-31 01:03:39
【问题描述】:

我看到了许多如何将匿名内部类转换为简单 lambda 表达式的示例。

我了解两者之间的技术差异。

但我只想知道什么时候到什么时候?

引入 lambdas 后使用 Anonymous Inner 类的业务用例场景是什么?

Lambda 是否完全废除了 java 8 中匿名内部类的使用?

【问题讨论】:

  • 如果匿名类有多个方法,lambda 不起作用。

标签: java lambda anonymous-class


【解决方案1】:

Lambda 只能用于代替 SAM(单一抽象方法)类。有时这些抽象类会用 @FunctionalInterface 进行注释,以强调它们可以被 lambda 表达式替换。

您的问题的答案是。匿名类仍然有它们的用途,lambda 语法只是为了简化只包含单个抽象方法的类的创建,例如FunctionCallableetc

【讨论】:

    【解决方案2】:

    想象一下这种情况

    interface Anon {
       void m1();
       void m2();
    }
    

    以及采用此接口的方法

    void useAnon(Anon a);
    

    在这种情况下,您将无法使用 lambda。

    useAnon( new Anon(){
       @Override void m1(){System.out.println("use m1");};
       @Override void m2(){System.out.println("use m2");};
    
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-27
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      相关资源
      最近更新 更多