Java 8 新特性 Lambda表达式
2015-03-27 13:40
591 查看
java 1.8新增了Lambda 表达式,这个对于java来说有着颠覆性的意义.使用java1.8 需要使用最新版本的eclipse或者Myeclipse,否则都不支持1.8的编译环境.MyEclipse2015 版下载地址:
http://www.myeclipsecn.com/download/ ;目前没有破解版;
这一特性的意义:
1.使java第一次从对象编程迈向函数性编程;
2.使java不再完全要求强类型,第一次像脚本语言一样,实现了向弱类型的突破;
3.Lambda表达式适用于单函数接口;
4.Lambda表达式返回的不是实现函数的返回值;
还记得当初刚刚开始接触Java,喜欢GUI编程,弄点小游戏,我们经常会碰到这样的情况:
上面重写了一个Button按钮,我们通过this.addActionListener方法在Button的构造方法中添加了一个事件监听器,
注意ActionListener是一个接口,它里面只有一个actionPerformed(ActionEvent e)的抽象方法,我们每次都需要按照这样的模式.现在有了Lambda表达式以后,我们可以这样写:
注意在System.out.println("")后面不要加分号;
解释下:
Lambda表达式要求接口只可以有一个方法,使用Lambda表达式时,不需要方法返回值,不需要参数类型,不需要方法体,不需要类名.
(e) 表示调用了 public void actionPerformed(ActionEvent e); 方法,该方法只有一个参数,()之外的部分全部被省略,参数类型也被省略,并且返回值已经不再是void,而是 ActionListener的一个匿名对象.
e 默认类型为ActionEvent,不需要coder自己再去申明. -> 是Lambda表达式的标示符,后面紧接的是接口方法的方法体.
再列举一个类似的例子:
run1 是传统的java声明Runnable接口对象的方式.
run2 是Lambda表达式声明方式. () 代表调用了run()方法,对于无参接口方法,Lambda调用也是无参形式.
接下来.我们自己实现一边Lambda表达式使用全过程:
1.新建一个POJO基本对象(做参数用,可以不要)
2.新建接口类:
3.新建测试类:
http://www.myeclipsecn.com/download/ ;目前没有破解版;
这一特性的意义:
1.使java第一次从对象编程迈向函数性编程;
2.使java不再完全要求强类型,第一次像脚本语言一样,实现了向弱类型的突破;
3.Lambda表达式适用于单函数接口;
4.Lambda表达式返回的不是实现函数的返回值;
还记得当初刚刚开始接触Java,喜欢GUI编程,弄点小游戏,我们经常会碰到这样的情况:
class OriginButton extends Button{ OriginButton(){ this.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { } }); } }
上面重写了一个Button按钮,我们通过this.addActionListener方法在Button的构造方法中添加了一个事件监听器,
注意ActionListener是一个接口,它里面只有一个actionPerformed(ActionEvent e)的抽象方法,我们每次都需要按照这样的模式.现在有了Lambda表达式以后,我们可以这样写:
class LambdaButton extends Button{ LambdaButton(){ this.addActionListener( (e) -> System.out.println("") ); } }
注意在System.out.println("")后面不要加分号;
解释下:
Lambda表达式要求接口只可以有一个方法,使用Lambda表达式时,不需要方法返回值,不需要参数类型,不需要方法体,不需要类名.
(e) 表示调用了 public void actionPerformed(ActionEvent e); 方法,该方法只有一个参数,()之外的部分全部被省略,参数类型也被省略,并且返回值已经不再是void,而是 ActionListener的一个匿名对象.
e 默认类型为ActionEvent,不需要coder自己再去申明. -> 是Lambda表达式的标示符,后面紧接的是接口方法的方法体.
再列举一个类似的例子:
class RunnableDemo{ Runnable run1 = new Runnable(){ public void run(){ System.out.println(""); } }; Runnable run2 = () -> System.out.println(""); }
run1 是传统的java声明Runnable接口对象的方式.
run2 是Lambda表达式声明方式. () 代表调用了run()方法,对于无参接口方法,Lambda调用也是无参形式.
接下来.我们自己实现一边Lambda表达式使用全过程:
1.新建一个POJO基本对象(做参数用,可以不要)
class A{ String a; public String getA(){ return this.a; } public String toString(){ return this.a; } }
2.新建接口类:
interface LambdaInterface{ public void inte(A a); }
3.新建测试类:
class LambdaInterfaceTest{ LambdaInterface li1 = new LambdaInterface(){ public void inte(A a){ System.out.println(a); } }; LambdaInterface li2 = a -> System.out.println(a); // 省略括号(多参数时,括号不可省略) LambdaInterface li3 = (a) -> System.out.println(a); // 标准模式 LambdaInterface li4 = (A a) -> System.out.println(a); // 手动声明参数类型为A LambdaInterface li5 = (a) -> System.out.println(a.getA()); // 弱类型参数,java自动匹配参数类型,不声明类型一样可以调用目标方法 LambdaInterface li6 = (a) -> { // {} 表示多语句方法体 A b = a; System.out.println(b); }; }
相关文章推荐
- Java 8新特性:lambda表达式
- Java 8 新特性:Lambda 表达式
- Java8特性详解 lambda表达式 Stream
- Java 8新特性:新语法方法引用和Lambda表达式及全新的Stream API
- Java8新特性之Lambda表达式
- Java 8新特性:lambda表达式(四)转载总结
- Java8 特性—— Lambda 表达式
- JAVA 新特性:lambda表达式
- java8新特性之lambda表达式(二)
- Java 8新特性:新语法方法引用和Lambda表达式及全新的Stream API
- Java8新特性 - Lambda表达式 - 基本知识
- Java JDK1.8新特性Lambda 表达式
- Java 8 新特性:Lambda 表达式的作用域(Lambda 表达式补充版)
- Java8 新特性之 Lambda 表达式
- Java8新特性——lambda表达式
- Java 8新特性-3 Lambda 表达式
- Java 8 新特性:Lambda 表达式之方法引用(Lambda 表达式补充版)
- Java8 新特性----函数式接口,以及和Lambda表达式的关系
- java8新特性学习笔记(一) Lambda表达式
- Java8 新特性之一---------Lambda表达式和函数式接口