Lambda表达式

为什么引入lambda表达式?

  1. 避免内部类定义过多
  2. 去掉无意义代码,只留下核心逻辑

函数式接口

定义:任何借口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。

对于函数式接口,可以通过lambda表达式来创建该接口的对象。

public class lambda {

    //3.静态内部类,把刚才实现的内部类粘贴过来加上static关键字
    static class micah2 implements milo{

        @Override
        public void lam() {
            System.out.println("milo is working,too...");
        }
    }


    public static void main(String[] args) {

        milo m =new micah();

        m.lam();

        micah2 m1=new micah2();
        m1.lam();

        //4.局部内部类
        class micah3 implements milo {
            @Override
            public void lam() {
                System.out.println("milo is working...3");
            }
        }
            micah3 m2=new micah3();
            m2.lam();

            //5.匿名内部类,没有类的名称,必须借助接口或者父类实现
            m= new milo() {
                @Override
                public void lam(){
                    System.out.println("milo is working...4");
                }
            };
            m.lam();

            /*************************/
            //用lambda简化
        //!!!需提前将m声明为接口类型 在最上方有一个句子:milo m =new micah();
            m = () -> {
                System.out.println("milo is working...5");
            };
            
            //后续需要调用!lambda只起到一个实现接口的作用
            m.lam();

        }
    }


//1.定义函数式接口
interface milo{
    void lam();
}

//2.实现类
class micah implements milo{

    @Override
    public void lam() {
        System.out.println("milo is working...");
    }
}

从2到5是一个不断简化的过程,在简化的过程中,实现单一功能的类,由常见的外部定义、实例化,到静态内部定义与实例化,再到成为一个局部类,成为一个匿名内部类,最后使用lambda表达式完成完全的简化,无需类定义即可完成对单一函数接口的实现,极大简化了代码量,并且无需查找上下文,一目了然。

在实现匿名内部类时,也会提示:

屏幕截图 2025-10-27 203730

lambda的继续简化

是的,lambda在简化了函数型接口的实现后,自己还能继续简化。

public class lambda2 {

    public static void main(String[] args) {
        //lambda 表示简化
        merry m = (int a)->{
            System.out.println("Merry Christmas!"+a);
        };

        //no 1. 简化参数类型
        m = (a)->{
            System.out.println("Merry Christmas!"+a);
        };

        //no 2. 简化括号
        m = a -> {
            System.out.println("Merry Christmas!"+a);
        };

        //no 3. 简化大括号 (代码只有一行)
        m = a -> System.out.println("Merry Christmas!"+a);

        m.merrychris(2);
    }
}
interface merry{
    public void merrychris(int a);
}

仅有一行代码时才可以对大括号进行简化

多个参数也可以去掉参数类型,但是要雨露均沾,不能独宠。且必须加上括号!

lambda表达式只能用于简化函数式接口,不能简化内含多个抽象函数的接口!

Posted on 2025-10-27 21:12  miloandmicah  阅读(0)  评论(0)    收藏  举报