1、lambda表达式(包含参数和方法体)
lambda表达式可以说是匿名内部类的一种简化写法,省略了类名、方法名、类型等。
不同点(使用区别):匿名内部类可以实现接口的多个抽象方法,lambda表达式只针对有一个抽象方法的接口
说明:lambda表达式的参数对应抽象方法的参数,返回值对应抽象方法的返回值。(必须满足,不然没法用)
2、函数式接口
函数式接口就是只有一个抽象方法的接口
3、方法引用
方法引用可以说是lambda表达式的一种简化写法。
不同点(使用区别):lambda表达式的方法体已经有实现的方法时,才可以用。eg: System.out::println 替代 (str) -> System.out.println(str)
说明:
①方法引用所引用的方法的参数列表与返回值类型,需要与函数式接口中抽象方法的参数列表和返回值类型保持一致!格式1、2
②若Lambda 的参数列表的第一个参数,是实例方法的调用者,第二个参数(或无参)是实例方法的参数时,格式3: ClassName::MethodName
3种使用格式:
1、对象的引用 :: 实例方法名
2、类名 :: 静态方法名
3、类名 :: 实例方法名
原文:https://www.cnblogs.com/xyfaneast/p/12005375.html