lambda表达式
-
作用:
- 避免匿名内部类过多
- 代码简洁,去除多余代码,留下核心逻辑
函数式接口:
一个接口,如果只包含一个抽象方法,那么它就是一个函数式接口
例如:
public interface class(){ public abstract void method() }
对于函数式接口,我们可以通过lambda表达式来创建该接口对象
看文字太过生涩,直接上代码
1.最开始的方法
定义一个接口,定义一个实现类,然后实例化调用
interface Course {
void add();
}
class CourseImpl implements Course {
@Override
public void add() {
System.out.println("course add...");
}
}
public class Demo {
public static void main(String[] args) {
Course course = new CourseImpl();
course.add();
}
}
2.使用静态内部类对上面的代码进行优化
interface Course {
void add();
}
public class Demo {
//静态内部类
static class CourseImpl implements Course {
@Override
public void add() {
System.out.println("course add...");
}
}
public static void main(String[] args) {
Course course = new CourseImpl();
course.add();
}
}
3.使用局部内部类继续优化
interface Course {
void add();
}
public class Demo {
public static void main(String[] args) {
//局部内部类
class CourseImpl implements Course {
@Override
public void add() {
System.out.println("course add...");
}
}
Course course = new CourseImpl();
course.add();
}
}
4.借用匿名内部类继续对代码优化
匿名内部类:没有类名,借助接口和父类
interface Course {
void add();
}
public class Demo {
public static void main(String[] args) {
//匿名内部类
Course course = new Course(){
@Override
public void add() {
System.out.println("course add...");
}
};
course.add();
}
}
5.简化为最终lambda
interface Course {
void add();
}
public class Demo {
public static void main(String[] args) {
//lambda
Course course = ()->{
System.out.println("course add...");
};
course.add();
}
}
lambda表达式传参的时候,参数类型是可以省略的
Course course = (int a)->{
....
};
//可简化为
Course course = (a)->{
....
};
当代码块中只有一行代码时,花括号也可以去掉
Course course = (a)->System.out.println("course add...");
甚至可以再去掉参数的括号
Course course = a -> System.out.println("course add...");