为了账号安全,请及时绑定邮箱和手机立即绑定

[解读] java1.8函数式编程解读_第二章lambda表达式

标签:
Java

这本书的第二章主要的内容是,

1,介绍lambda表达式。Lambda表达式的结构。
2,Lambda表达式是中的变量是不可变的,不是变量。
3,介绍函数式接口
4,参数的类型推断。

可能有些java开发者并不明白为什么java用的好好的为什么要添加lambda这样一种编程方式,该书的作者并没有直接给出答案,你如果使用过lambda这个原因就不言而喻。
对于不了解的事物,首先我们会问他能做什么,首先解读这本书的第二章我们可以回答一下几个问题。

1,什么是lambda表达式?
2,Lambda表达式的作用?
3,Lambda表达式的一些特性?

首先让我们来看一下第一个问题,什么是lambda表达式,Lambda 表达式”(lambda expression)是一个匿名函数,设计的目的是为了方便java程序员将行为(代码)作为参数传递。当然传统java匿名内部类的目的和lambda表达式的设计目的是一样的。只是lambda形式更简洁。
既然你知道了lambda表达式的目的就是为了传递行为,而非传递值。那么传递行为的具体表现又是什么呢?对比面向对象编程,方法的参数可以是基本类型,对象,集合等类型。如果方法的参数是方法。就表示传递行为。作者给了一个例子:

用Swing编写了一个button点击button触发一个事件。使用匿名内部类将行为和按钮单击进行关联。

 
   jButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("这个是一个button");
            }
        });

在这个例子中,我们创建了一个新对象,它实现了ActionLtistener接口。这个接口只有一个方法actionPerformed,当用户点击屏幕上的按钮时,button 就会调用这个方法。匿名内部类实现了该方法。
这实际上是一个代码即数据的例子——我们给按钮传递了一个代表某种行为
的对象。
你会发现每次使用这种匿名内部类,都是固定的模板:

New 接口名称(){
      实现方法{
          业务逻辑
      }
    }

New出来的就是需要传递的对象。这样读代码的时候就比较多。若我们只想传递业务逻辑,而不是对象,就可以使用lambda表达式。

Lambda如下:
jButton.addActionListener(eve -> System.out.println("这个是一个button"));
和传入一个实现某接口的对象不同,我们传入了一段代码块——一个没有名字的函数。event 是参数名,和上面匿名内部类示例中的是同一个参数。-> 将参数和 Lambda 表达式 的主体分开,而主体是用户点击按钮时会运行的一些代码。

和使用匿名内部类的另一处不同在于声明 event 参数的方式。使用匿名内部类时需要显式 地声明参数类型 ActionEvent event,而在 Lambda 表达式中无需指定类型,程序依然可以 编译。这是因为 javac 根据程序的上下文(addActionListener 方法的签名)在后台推断出 了参数 event 的类型。这意味着如果参数类型不言而明,则无需显式指定。稍后会介绍类 型推断的更多细节,现在先来看看编写 Lambda 表达式的各种方式。

Java 8 中对类型推断系统的改善值得一提。上面的例子将 new HashMap<>() 传给 useHashmap 方法,即使编译器拥有足够的信息,也无法在 Java 7 中通过 编译。

原文链接:https://mp.weixin.qq.com/s/FsS8CClkT-8zbyhoSw6C3w
作者:一起写代码

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消