Lambda是否完全从Java 8取消了匿名内部类的使用?

问题描述 投票:0回答:1

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

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

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

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

Lambda是否从Java 8完全取消了匿名内部类的使用?

java lambda anonymous-class
1个回答
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");};

});

2
投票

Lambda仅可代替SAM(单一抽象方法)类使用。有时,这些抽象类用@FunctionalInterface注释,以强调可以用lambda表达式替换它们的事实。

您的问题的答案是。匿名类仍然有其用法,lambda语法仅用于简化仅包含单个抽象方法的类的创建,例如@FunctionalInterfaceFunctionFunction

© www.soinside.com 2019 - 2024. All rights reserved.