Lambda表达式的学习

Java在1.8版本的时候,引入了Lambda表达式,Lambda表达式指的是应用在单一抽象方法接口环境下的一种简化定义形式,可以用于解决匿名内部类的定义复杂问题。

所以,先来研究匿名内部类是什么!

匿名内部类

  • 没有名字的内部类
  • 必须在抽象类或接口基础上才可以定义

匿名内部类的产生原因

public class Test {
    public static void main(String[] args) {
        fun(new MsgPrintImpl());
    }

	//接受接口的对象
    public static void fun(MsgPrint msg) {
        msg.print();
    }
}

//定义一个信息输出的接口
interface MsgPrint{
    public void print();
}

//实现接口
class MsgPrintImpl implements MsgPrint{
    @Override
    public void print() {
        System.out.println("输出信息");
    }
}

结果:
输出信息

很明显,一个简单的接口,在我们再主方法中使用之前,需要先实现它的方法,这样既麻烦又不方便
所以我们出现了匿名内部类的方式来解决这个问题

public class Test {
    public static void main(String[] args) {
        fun(new MsgPrint(){
            @Override
            public void print() {
                System.out.println("输出信息");
            }
        });
    }

    public static void fun(MsgPrint msg) {
        msg.print();
    }
}

interface MsgPrint{
    public void print();
}


结果:
输出信息

在这里,我们直接使用了匿名内部类,不需要去再去创建一个接口实现类,然后再拿来实例化对象,结果一样,只是把重写的方法拿到我们需要用的地方去操作。
虽然简单,但是在开发过程中,不一定好用,一般还是用实现接口类来,看起来更加直观。

重写的过程,观察两个代码比较,实际上是一样的,java为了简化代码量,让编程更加的便捷,引入了Lambda表达式。

Lambda表达式

匿名内部类的方式:

public class Test {
    public static void main(String[] args) {
        fun(new MsgPrint(){
            @Override
            public void print() {
                System.out.println("输出信息");
            }
        });
    }

    public static void fun(MsgPrint msg) {
        msg.print();
    }
}

interface MsgPrint{
    public void print();
}

Lambda方式:

public class Test {
    public static void main(String[] args) {
        fun(()->System.out.println("输出信息"));
    }

    public static void fun(MsgPrint msg) {
        msg.print();
    }
}

interface MsgPrint{
    public void print();
}

两者比较,Lambda表达式,更加的方便快捷,不用重写方法,只需要将值传入进去就可以

分析原理

Lambda的语法:(参数)->方法体
fun(()->System.out.println(“输出信息”))中的()->System.out.println(“输出信息”)实际上可以这样理解
在这里插入图片描述
一般来说,Lambda中的 (参数) 我们都不会在内部设置值,因为接口都是用来别实现重写方法的。
Lambda中-> 后面的值,相当于重写了接口中的方法。
但是比实现类或者匿名内部类中更方便快捷。

定义多个抽象方法

只需要在接口上面加上@FunctionalInterface注解就可以(第一个是L,第二是i)

public class Test {
    public static void main(String[] args) {
        fun(()->{//这里的括号别忘了!当有多行语句的时候,必须加{}
            System.out.println("输出信息");
            System.out.println("输出信息1");
        });
    }

    public static void fun(MsgPrint msg) {
        msg.print();
    }
}
@FunctionalInterface
interface MsgPrint{
    public void print();
}

虽然Lambda表达式简单便捷,但是实际开发中并不常用,对java的基本结构会造成冲击,看起来也不美观,一般实现类更常用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值