Lambda表达式详解
Lambda表达式作用
- 避免匿名内部类过多
- 简洁代码
- 此外,lambda表达式其实隶属于函数式编程
函数式接口(包含何为Lambda表达式)
-
任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口
如下
//这是一个只有一个抽象方法的接口interface(即函数式接口) public interface Runnable { public abstract void run(); //直接写void run();也是一样的 }
-
对于函数式接口,我们可以使通过lambda表达式来创建该接口的对象
如下(1,2,4,5,6,7即为不断简化,最后到使用lambda表达式的过程)
package com.xiaoke.study.day01.com.xiaoke.study.Demo04_Lambda; /** * 推导lambda表达式 * */ public class Lambda { //4.静态内部类 static class Test3 implements LamTest{ @Override public void LanbdaWay() { System.out.println("这是对于实现接口的静态内部类的方法"); } } public static void main(String[] args) { /* * 下面这个叫做接口的实现类对象 * 是java多态的一种体现 * 作用看详解1 * */ LamTest test = new Test(); test.LanbdaWay(); //下面这个实现的是静态内部类 test = new Test3(); test.LanbdaWay(); //5.局部内部类 class Test4 implements LamTest{ @Override public void LanbdaWay() { System.out.println("这是对于实现接口的局部内部类的方法"); } } //下面这个实现的是局部内部类 test = new Test4(); test.LanbdaWay(); //6.匿名内部类 没有类的名称,只能借助接口或者父类 test = new Test(){ @Override public void LanbdaWay() { System.out.println("这是对于实现接口的匿名内部类的方法"); } }; //7.用lambda简化 test = ()->{ System.out.println("这是用lambda简化后方法"); }; } Test test = new Test(); } /* *详解1:接口的实现类可以有很多个,如 LinkedList或者Vector等等, * 如果使用这种方式,List list = new ArrayList<String>(); 以后不想用ArrayList了,直接改为你想用的实现类,如List list = new LinkedList<String>(); * 这样,虽然修改了实现类,但相关list调用方法的代码是不用修改的;如果是ArrayList list = new ArrayList<String>(); * 这种写法,那就有可能要修改非常多代码了,因为,原本list调用了ArrayList中的方法来实现某个功能,再修改实现类过后,list原本调用的方法在LinkedList中不存在,则还要修改对应调用的方法 * */ //1.定义一个只有一个抽象方法的接口(即函数式接口) interface LamTest{ void LanbdaWay(); } //2.定义一个方法,实现上面的这个接口 class Test implements LamTest{ @Override public void LanbdaWay() { System.out.println("这是对于实现接口的方法"); } } //3.定义一个方法,解释详解1 class Test2 implements LamTest{ @Override public void LanbdaWay() { System.out.println("这是解释接口的实现类"); } public void UniqueWay() { System.out.println("这是Test2独有的方法,如果用的是 Test test = new Test() 改成Test2 test = new Test2(),则UniqueWay就不能使用了"); } } //此接口是为了说明,一个接口可以有多个函数,但是当接口只有一个方法的时候,才能用lambda简化接口的实现方法,即只有一个抽象方法的接口 //才是 函数式接口 interface LamTest2{ void LanbdaWay(); void LanbdaWay2(); }
原创文章,作者:wure,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/267782.html