lamdba表达式是为了避免匿名内部类定义过多
为什么要使用lambda表达式
- 避免匿名内部类定义过多
- 可以让你的代码看起来很简洁
- 去掉了一堆没有意义的代码,只留下核心的逻辑。
package com.xh.Thread;
/**
* lamdba 表达式事实上是内部接口
*
*/
public class LamdbaTest {
//3,定义一个静态内部类
static class Like2 implements Ilike{
@Override
public void lamdba() {
System.out.println("I like lamdba2");
}
}
public static void main(String[] args) {
Ilike ilike = new Like();
ilike.lamdba();
ilike = new Like2();
ilike.lamdba();
//4 局部内部类
class Like3 implements Ilike{
@Override
public void lamdba() {
System.out.println("I like lamdba3");
}
}
ilike = new Like3();
ilike.lamdba();
//5匿名内部类
ilike = new Ilike() {
@Override
public void lamdba() {
System.out.println("I like lamdba4");
}
};
ilike.lamdba();
//6用lamdba简化 对比一下省略部分代码
ilike = ()->{
System.out.println("I like lamdba5");
};
ilike.lamdba();
}
}
//定义一个函数接口
interface Ilike{
void lamdba();
}
//实现类
class Like implements Ilike{
@Override
public void lamdba() {
System.out.println("I Like lamdba ");
}
}
说明lamdba表达式在此发挥了作用。
ilike = ()->{
System.out.println(“I like lamdba5”);
}
package com.xh.Thread;
//局部内简化变成匿名内部类
public class LamdaTest02 {
//定义一个全局内部类
static class Face1 implements IFace{
@Override
public void face(int a) {
System.out.println("也就是吧外部类移动到外部类-->" + a);
}
}
public static void main(String[] args) {
IFace iFace = new Face();
iFace.face(2);
Face1 face1 = new Face1();
face1.face(111);
//来一个局部内部类
class Face2 implements IFace{
@Override
public void face(int a) {
System.out.println("我是局部内部类-->" +a );
}
}
Face2 face2 = new Face2();
face2.face(110);
//在一步简化变成匿名内部类
iFace =(int a)-> {
System.out.println("我是lamda1号-->" +a);
};
/* //简化1,参数类型
iFace =(a)-> {
System.out.println("我是lamda1号-->" +a);
};
iFace =(a,b)-> {
System.out.println("我是lamda1号-->" +a);
System.out.println("我是lamda2号-->" +a;)
};
//简化2.简化括号
iFace = a-> {
System.out.println("我是lamda1号-->" +a);
};*/
//简化3,去掉花括号
iFace = a->
System.out.println("我是lamda2号-->" +a);
//总结
//lambda 表达是只能有一行代码的情况下才能简化为一行,如果有多行,那么就用代码块包裹
//提前需要接口为函数式接口
//多个参数也可以去掉参数类型,要去掉就都要去掉,必须加上括号
iFace.face(520);
}
}
//重要。这个必须要有
interface IFace{
void face(int a);
// void face (int a,int b);
}
class Face implements IFace{
@Override
public void face(int a) {
System.out.println("注意实现接口必须要重写接口里边的方法 --->" + a);
}
}