首页 > 代码库 > Java8学习笔记(一)

Java8学习笔记(一)

Lambda是什么?

  In programming languages such as Lisp,Pythson and Ruby Lambda is an operator used to denote anonymous function or closures,following the usage of lambda calculus

什么要使用Lambda表达式?

  在java中,我们无法将函数作为参数传递给一个方法,也无法声明返回一个函数的方法

  在javascript中,函数参数是一个函数,返回值是另一个函数的情况是非常常见的,javascript是一门非常典型的函数式语言

Java匿名内部类案例带来的问题

 1 public class Test {
 2     public static void main(String[] args) {
 3         JFrame jframe = new JFrame("测试窗口");
 4         JButton jbtn   = new JButton("测试按钮");
 5         jbtn.addActionListener(new ActionListener() {
 6             public void actionPerformed(ActionEvent arg0) {
 7                 System.out.println("测试按钮被点击了");
 8             }
 9         });
10         jframe.add(jbtn);
11         jframe.setVisible(true);
12     }
13 }

以上代码,关键部分就是执行按钮被点击后的核心操作,但是却使用了大量的冗余代码,那么使用Lambda表达式可以有效地简化以上代码

1 jbtn.addActionListener(event -> {
2             System.out.println("按钮被点击了");
3 });
event的数据类型是java7开始加入的类型推断机制,有些时候是推断不出来的,需要我们自己显示定义
1 jbtn.addActionListener((ActionEvent e) -> {
2             System.out.println("按钮被点击了");
3             System.out.println("不使用类型推断机制");
4 });

 Lambda表达式的基本结构

(param1,param2,...)->{
          statemnt;
}

再看一个案例

 

 

总结:关于函数式接口

1.如果一个接口只有一个抽象方法,那么该接口就是一个函数式接口

2.如果我们在某个接口上声明了FunctionalInterface注解,那么编译器就会按照函数式接口的定义来要求该接口

3.如果某个接口只有一个抽象方法,但我们并没有给该接口声明Functional注解,那么编译器依旧会将该接口看做函数式接口

  

Java8学习笔记(一)