标签:测试 ble str new button 匿名内部类 opera 结构 set
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注解,那么编译器依旧会将该接口看做函数式接口
标签:测试 ble str new button 匿名内部类 opera 结构 set
原文地址:http://www.cnblogs.com/nanjingwangbo/p/7083175.html