我看到了许多示例,这些示例如何将匿名内部类转换为简单的lambda表达式。
我了解两者之间的技术差异。
但是我只想知道什么时候到什么时候?
引入lambda之后,使用Anonymous Inner类的业务用例场景是什么?
Lambda是否从Java 8完全取消了匿名内部类的使用?
想象这种情况
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");};
});
Lambda仅可代替SAM
(单一抽象方法)类使用。有时,这些抽象类用@FunctionalInterface
注释,以强调可以用lambda表达式替换它们的事实。
您的问题的答案是否。匿名类仍然有其用法,lambda语法仅用于简化仅包含单个抽象方法的类的创建,例如@FunctionalInterface
,Function
,Function
,