函数式接口的定义:
任何接口只要只包含唯一一个抽象方法,那么它就是一个函数式接口。
**使用条件:**函数式接口。
特点:
- 避免匿名内部类定义过多而催生;
- 实质属于函数式编程的概念
- 优点:避免匿名内部类定义过多
让代码看起来更整洁
去掉一堆没用的代码,减少冗余,留下核心的代码逻辑。
演变过程
public class Lamda_demo {
// 2、静态内部类
static class Like2 implements ILike{
@Override
public void lamda() {
System.out.println("我是通过静态内部类实现的方法~~");
}
}
public static void main(String[] args) {
ILike like = new Like();
like.lamda();
// 静态内部类实现
like = new Like2();
like.lamda();
// 3、局部内部类
class Like3 implements ILike{
@Override
public void lamda() {
System.out.println("我是通过局部内部类实现的方法~~");
}
}
like = new Like3();
like.lamda();
// 4、匿名内部类
like = new ILike() {
@Override
public void lamda() {
System.out.println("我是通过匿名内部类实现的方法~~");
}
};
like.lamda();
// 5、用lamda简化
like = () ->{
System.out.println("我是通过lamda实现的方法~~");
};
like.lamda();
}
}
//接口
interface ILike{
void lamda();
}
//实现类
class Like implements ILike{
//1、实现接口
@Override
public void lamda() {
System.out.println("我是通过接口实现的方法~~");
}
}
简化
package Thread_demo8;
public class Lamda_demo2
{//main方法
public static void main(String[] args) {
// 1 lamda表达式简化
Ilove ilove= (int a)->{
System.out.println("i love you"+a);
};
ilove.love(521);
// 2 简化参数类型
ilove = (a) -> {
System.out.println("i love you"+a);
};
ilove.love(520);
// 3 去掉花括号
ilove = a->System.out.println("hello world!!" +a);
ilove.love(99);
}
}
//定义接口
interface Ilove {
void love(int a);
}
//定义实现类
class Love implements Ilove{
@Override
public void love(int a) {
System.out.println("I LOVE YOU --->"+a);
}
}
总结
//lamda表达式只能有一行代码的情况下,才能简化成一行,,如果有多行,那么就用代码块包裹。
//前提是接口为函数式接口
//多个参数也可以去掉参数类型,要去掉就去掉,要保留就保留