辰歆

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

参考教材  魔乐科技网课: http://www.mldn.cn/course/40/task/512/show

一、Lamda表达式的作用

  Lamda 是一种基于函数的编程方式。java是面向对象的编程语言,也就是说一切操作都基于类,所有功能都定义在类中。很多习惯于函数编程的开发者就觉得不好用,为了吸引更多开发者,java1.8终于推出了Lamda表达式。

  但并不是有了Lamda表达式java才开始的函数编程。最早是通过匿名内部类实现的(以接口为主)。

回顾匿名内部类

interface Message {
    public void print(String str) ;
}
public class Main {
    public static void main(String[] args) {
        Message msg = new Message() {
            
            @Override
            public void print(String str) {
                System.out.println(str);
            }
        };
        msg.print("hello");
        
    }

}

输出结果

hello

  由以上代码可见,目的是为了输出一条语句,却由于java类结构的强制限制,所以显得代码过于复杂。

利用Lamda表达式实现

interface Message {
    public void print(String str) ;
}
public class Main {
    public static void main(String[] args) {
        Message msg = (s) -> System.out.println(s);
        msg.print("hello");
    }

}

  首先不看语法,至少通过Lamda表达式,这个语句少了,没有了java类结构的过分限制。

 

 

二、基础语法

  上面程序的   Message msg = (s) -> System.out.println(s); 就是一条Lamda表达式

  其形式为:

  (参数,名称可以随意起)-> 方法体(多行要加{ }括住,只有return语句时要省略return)

  Lamda表达式的组成要求如下:

        (参数):与Message接口定义的print()方法的参数类型一致,但是此处不需要进行声明。

    ->        :是一个固定语法,表示将参数指向方法体。

    方法体 :就是最早进行匿名内部类实现方法的时候所编写的方法体代码。

  在使用Lamda方法的时候有一个最为重要的定义要求:接口里面的方法只能有一个。

 

1、Lamda 表达式最重要的目的是解决匿名内部类的问题

2、如果要想使用Lamda表达式,必须以接口为基础,而且接口只能有一个抽像方法

三、函数接口的定义

   一直在强调,如果要实现Lamda表达式,那么必须有一个前提,这个前提就是接口里面定义的抽想方法只能存在一个,所以为了严格这样的语法要求。可以使用函数式接口定义。

定义函数接口:

@FunctionalInterface
interface Message {
    public void print(String str) ;
}

  这样就能限制接口中的抽象方法只有一个,多会报错

 

posted on 2018-04-20 20:11  辰歆  阅读(305)  评论(0编辑  收藏  举报