Lambda 表达式
Lambda 是从JDK1.8开始推出重要新特性。
因为很多的开发语言都开始支持函数式编程,其中最具代表性的就是haskell。
函数式编程和面向对象的编程可以理解为两大开发阵营,也就是说很多人觉得面向对象的概念过于完整,结构操作不明确。
一、范例:传统的面向对象开发
package cn mldn. demo;interface IMessage f
public voidprint();
//这是一个接口,接口中的抽象方法必须有子类
publicclass TestDemo f
public static voidmain(String[] args)f
IMessage msg=newIMessage()f
public void print()f 11 ùñÈ sằ# iãitSystem out. println("Hello World !");];
];
msg. print();
]
使用匿名内部类来实现接口最大的好处是节约了一个文件,但是最大的缺点是看得晕。
对此类操作更简化的实现,如果采用的是函数式的编程模型
二、函数式编程模型
package cn.mldn .demo;
interface IMessage{
public void print();//这是一个接口,接口中的抽象方法必须有子类}
public class TestDemo{
pub1ic static void main(String[] args){
//函数式编程的使用,目的还是输出一-句话
IMessage msg=()->System. out. println("Hello World!");msg. print();
}
}
面向对象的语法最大的局限要求在于:结构必须非常完美。
但是要想使用函数式编程有一个前提:
接口必须只有一个方法。如果有两个方法,那么将无法使用函数式编程。
所以如果现在某一个接口就是为了函数式编程而生,最好定义的时候就让其只能够定义一个方法,
所以有了一个新的注解:
@FunctionInterface。
- ****@FunctionInterface
Package cn. mldn. demo;
interface IMessage{
public void print() ;//这是一个接口,接口中的抽象方法必须有子类}
public class TestDemo{
pub1ic static void main(String[] args) {
//函数式编程的使用,目的还是输出一-句话
IMessage msg=()-> System. out. println("Hello World !");msg. print();
}
}
实际上对于以上的语法形式:
.(参数)_>单行语句;
- ****Lambda 表达式
这个时候方法本身只包含有一行语句,那么直接编写语句即可,如果要是有多行语句,则就需要使用“{}”了。
如果表达式里面的内容只是有一行进行数据的返回,那么就直接使用语句即可,可以不写return。
五、范例:直接进行计算
package cn. mldn. demo;
@FunctionalInterface
interface IMath (
pub1ic int add(int x,int y) ;
]
public class TestDemo f
public static voidmain(String[ ]args) f11函数式编程的使用,目的还是输出一句话
IMath msg= (p1,p2)->p1+p2;
System. out. println(msg. add(10,20));
]
六、总结
习惯了用函数式编程的人员就可以使用,不习惯则慢慢习惯,因为在行业之内已经有了一家公司专门基于java做了一套自己的函数式编程语言:Scala