Lambda表达式时jdk的一个新特性,可以取代大部分的匿名内部类,写出更优雅的java代码,尤其在集合的遍历和其它集合操作中,可以极大的优化代码结构
1.函数式接口?
一个接口只有一个抽象类方法的接口,叫函数式接口
2.怎么定义函数式接口?
为了避免后来的人在这个接口中增加方法导致其含有多个的方法需要被实现,我们可以在这个接口加上一个声明@FunctionalInerface,这样别人就无法在里面添加新的接口方法了
3.使用static和default关键字,接口中的方法可以拥有方法体
//接口类
@FunctionalInterface
public interface IPerson {
public void show();
default String getUser() {
return "";
}
static void dete() {
System.out.println("dete");
}
}
//实现类
public class Person implements IPerson {
@Override
public void show() {
}
@Override
public String getUser() {
return "user";
}
}
//测试类
public class Test {
public static void main(String[] args) {
IPerson person = new Person();
person.show();
person.getUser();
IPerson.dete();
}
}
从上面代码我们可以看出几点:
- 接口中的方法可以存在有方法体的static和default修饰
- 被default修饰的方法,可以被子类继承,而static 不可以,static 修饰的必须使用类名来调用
4.实际开发常用方式
package com.draven;
@FunctionalInterface
public interface IPerson {
public void show();
default String getUser() {
return "";
}
static void dete() {
System.out.println("dete");
}
}
package com.draven;
public class Test {
public static void main(String[] args) {
doTest(() -> {
System.out.println("22222");
});
}
static void doTest(IPerson person) {
person.show();
}
}
5方法引用
在lambda的基础之上在进行了一次简化