Lambda表达式简化匿名内部类

Posted JunMain

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lambda表达式简化匿名内部类相关的知识,希望对你有一定的参考价值。

Lambda表达式

作用

我们之前已经看到了,当我们用匿名内部类的时候,Idea给我们提示,让我们用Lambda表达式简化匿名内部类,所以Lambda

表达式的出现是为了简化匿名内部类,那么什么样的匿名内部类才能用Lambda表达式简化呢?

  1. 匿名内部类必须是实现的接口
  2. 该接口中只有一个抽象方法

形式:

注意我们参数的类型可以不写,JVM可以通过上下文“类型推断”

(参数1,参数2,····) -> {
    
    //todo, 实现接口的方法体
};

//注意:当参数只有一个的()可以不写, 
 参数1 -> {
     
    //todo
 };


//注意:当实现的方法只有一个语句的时候, return和{}可以省略不写
(参数1,参数2,····) -> //todo ;

例子

举一个例子,我们把之前匿名内部类实现接口的那个例子用Lambda表达式替换

IStudent接口

public interface IStudent {
    default  void say(){
        System.out.println("我是一个从不翘课的学生,嘿嘿");
    }

    void study();			//接口的函数默认的修饰符 是public abstract
}

测试类


import org.junit.Test;

public class testLambda {
    @Test
    //Lambda表达式实现
    public void test01(){
        IStudent iStudent = () ->
            System.out.println("我在学校Lambda表达式");

        iStudent.say();
        iStudent.study();
    }
    
    //匿名内部类实现
    
 @Test
    public void testImplementsInterface(){
        //多态向上转型
        IStudent student = new IStudent() {
            @Override
            public void study() {
                System.out.println("我在天天摸鱼的时候学习");
            }
        };

        student.say();
        student.study();
    }
}

我们发现Lambda表达式确实简化了很多。

两个参数的

public interface IFather {
    void say(int age, int weight);
}

测试类

   @Test
    public void test02(){

        IFather iFather = (age, weight) ->
            System.out.println("年龄:" + age + "   "+ "体重:" +weight);

        iFather.say(25, 75);
    }

总结

Lambda表达式其实就是在于方法体,把目光集中于方法体的具体实现,我们调用的时候直接调用抽象的接口即可。

以上是关于Lambda表达式简化匿名内部类的主要内容,如果未能解决你的问题,请参考以下文章

Lambda表达式简化匿名内部类

为什么匿名内部类可以实例化并实现抽象方法?lambda表达式是简化了匿名内部类的实现过程吗?

JAVA——进阶语法——使用lambda表达式(λ)进行函数式编程,对匿名内部内代码简化思路及案例在线程中的应用

java 多线程-lambda和匿名内部类

08_Lambda表达式与匿名内部类的联系与区别

Java Lambda表达式