首页 > 代码库 > 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学习笔记(一)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。