简化代码,避免匿名内部类定义过多
学习Lamda表达式的关键在于理解Functional Interface(函数式接口)
函数式接口的定义:任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口
public interface Runnable {
public abstract void run();
}
对于函数式接口,我们可以通过lamda表达式来创建该接口的对象
package com.wang.lamda;
public class LamdaDemo01 {
//3、静态内部类
//把实现类写成静态内部类
static class Like2 implements ILike{
@Override
public void Lambda() {
System.out.println("i like lambda2");
}
}
public static void main(String[] args) {
//接口new实现类
ILike like=new Like();
like.Lambda();
like=new Like2();
like.Lambda();
//4、局部内部类
class Like3 implements ILike{
@Override
public void Lambda() {
System.out.println("i like lambda3");
}
}
like=new Like3();
like.Lambda();
//5、匿名内部类,没有类的名称,必须借助接口或父类
like=new ILike() {
@Override
public void Lambda() {
System.out.println("i like lambda4");
}
};
like.Lambda();
//6、用lambda简化
like=()-> {System.out.println("i like lambda5");};
like.Lambda();
}
}
//1、定义一个函数式接口
interface ILike{
//只要在接口里面,自动就是抽象的,不需要写出来
void Lambda();
}
//2、实现类
class Like implements ILike{
@Override
public void Lambda() {
System.out.println("i like lambda");
}
}
package com.wang.lamda;
public class LambdaDemo {
//4、外部类放到内部 静态内部类
static class Love2 implements ILove{
@Override
public void love(int a) {
System.out.println("i love you "+a);
}
}
//main方法
public static void main(String[] args) {
ILove love=new Love();
love.love(1);
love=new Love2();
love.love(2);
//5、局部内部类
class Love3 implements ILove{
@Override
public void love(int a) {
System.out.println("i love you "+a);
}
}
love=new Love3();
love.love(3);
//6、匿名内部类
love=new ILove() {
@Override
public void love(int a) {
System.out.println("i love you "+a);
}
};
love.love(4);
//7、Lambda表达式简化 方法中有参数
love=(int a)->{ System.out.println("i love you "+a); };
love.love(5);
//7.1 简化Lambda
love=a -> {
System.out.println("i love you "+a);
};
love.love(6);
//7.2
love=a -> System.out.println("i love you "+a);
love.love(7);
}
}
//1、定义接口
interface ILove{
//2、写方法,接口中是抽象方法,不用写abstract
void love(int a);
}
//3、实现类
class Love implements ILove{
@Override
public void love(int a) {
System.out.println("i love you "+a);
}
}
总结
Lambda表达式:
只有一行代码的情况下才能去掉花括号,只剩下一行
多个参数也可以去掉参数类型,要去掉就都去掉,必须加上括号
前提是接口是函数式接口