lambda表达式:
lambda表达式是对匿名内部类的简化
使用前提:方法的参数必须是接口 并且 接口中有且仅有一个抽象方法
public static void main(String[] args) { goShow(new UserService() { @Override public void show() { System.out.println("show 方法执行了..."); } }); System.out.println("使用lambda表达式"); goShow(() -> { System.out.println("Lambda show 方法执行了..."); }); } public static void goShow(UserService userService){ userService.show(); }
UserService 是一个接口,只有show()一个方法;
lambda表达式的省略写法:
1. 小括号内的参数类型可以省略
2. 如果小括号内只有一个参数,则小括号可以省略
3. 如果大括号内只有一个语句,则可以省略大括号、return 及分号
lambda的原理:
Lambda表达式在程序运行的时候会形成一个类:
1. 在类中新生成一个方法,这个方法的方法体就是Lambda表达式中的代码
2. 还会形成一个匿名内部类,实现接口,重写抽象方法
3. 在接口中重写方法会调用新生成的方法
生成的class文件如下:
接口增强:
在jdk1.8之前,接口中只能有静态常量和抽象方法,在1.8版本中增加了默认方法和静态方法,为了避免在接口中新增或修改方法时所有的实现类都要同步修改
默认方法:使用default修饰,可以被接口的实现类继承并重写,由实现类的实例调用
静态方法:使用static修饰,不能被接口的实现类继承,只能通过接口名调用
申明默认方法和静态方法:
重写默认方法: 默认方法可以重写也可以不重写,静态方法是不能被重写的
调用默认方法和静态方法:如果默认方法没有被重写,则调用的是接口的默认方法
Optional判空:
这个操作比较简单,参考下面博客