Java8学习笔记
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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学习笔记的主要内容,如果未能解决你的问题,请参考以下文章