一、Lambda表达式入门
我们先来看一段代码:匿名内部类的方式实现参数的传递
interface Command{ public abstract void test(); } public class CommandTest { public void show(Command c) { c.test(); } public static void main(String[] args) { CommandTest ct=new CommandTest(); ct.show(new Command() { @Override public void test() { System.out.println("Command测试"); } }); } }
interface Command{ public abstract void test(); } public class CommandTest { public void show(Command c) { c.test(); } public static void main(String[] args) { CommandTest ct=new CommandTest(); ct.show(()->{System.out.println("Lambda表达式入门测试");});//Lambda表达式实现参数传递
} }
上面的一段代码和之前的除了参数传递方式不同,其他都一样,第一段代码用匿名内部类的方式实现参数传递,第二段代码用Lambda表达式实现参数传递。
我们会发现使用Lambda表达式实现参数传递会简洁很多,少写了很多代码,却可以实现同样的功能。
二、Lambda表达式详细介绍:
Lambda表达书由三部分组成:
1、形参列表。形参列表允许省略形参类型。如果形参列表中只有一个参数,甚至连形参列表的圆括号也可以省略。
2、箭头(->),必须由英文中画线和大于号组成
3、代码块。如果代码块只包含一条语句, Lambda表达式允许省略代码块的花括号,那么这条语句就不要用花括号表示语句结束。 Lambda代码块只有一条 retur语句,甚至可以省略 return关键字。 Lambda表达式需要返回值,而它的代码块中仅有一条省略了 return的语句, Lambda表达会自动返回这条语句的值。
Lambda表达式与函数式接口:
Lambda表达式的类型,也称为“目标类型”,Lambda表达式的类型必须是函数式接口,函数式接口就是只能拥有一个抽象方法的接口。函数式接口可以包含多个默认方法和类方法,但只能有一个抽象方法。
Lambda表达式与匿名内部类的区别:
1、Lambda表达式与匿名内部类一样,都可以直接访问“ effectively final”的局部变量,以及外部类的成员变量(包括实例变量和类变量)。
2、Lambda表达式创建的对象与匿名内部类生成的对象一样,都可以直接调用从接口中继承的默认方法
3、
原文地址:https://www.cnblogs.com/wgblog-code/p/11429106.html
时间: 2024-10-10 13:20:34