函数式编程
从JDK1.8开始简化开发提供Lambda表达式的支持,可以进行函数式编程的开发。
Lambda表达式
@FunctionalInterface //函数式接口
interface IMessage{
public void send(String str);
}
main{
IMessage msg = (str) ->{
print("test"+str);
}
msg.send("www.mldn.cn");
}
利用这种形式避免了复杂的面向对象的结构要求。
Lambda表达式如果要使用,那么必须有一个重要的要求:SAM(Single Abstract Method)只有一个抽象方法。
只有一个抽象方法称为函数式接口,而函数式接口才可以被Lambda表达式所使用。
对于Lambda表达式提供如下几种格式:
- 方法没有参数:()->{};
- 方法有参数:(参数,参数)->{};
- 如果只有一行语句返回:(参数,参数)->语句;
利用Lambda表达式的确可以摆脱传统面向对象之中关于结构的限制,使得代码更简便。
方法引用
引用数据类型最大特点是可以进行内存的指向处理,但是在传统开发中一直使用的只是对象引用操作,从JDK1.8之后提供方法的引用,即不同的方法名称可以描述同一个方法。
进行方法引用提供有如下四种形式:
- 引用静态方法: 类名称::static方法名称;
- 引用某个实例对象的方法: 实例化对象::普通方法;
- 引用特定类型的方法: 特定类::普通方法;
- 引用构造方法: 类名称:: new;
利用方法引用这一概念可以为一个方法定义多个名字,但是要求必须是函数式接口。
方法引用长更多情况下也只是弥补了对于引用的支持功能。
内建函数式接口
在JDK1.8中提供Lambda以及方法引用,但是发现如果由开发者自己定义的函数式接口,往往都需要使用"@FunctionalInterface"注解进行大量声明,于是很多情况下如果为了方便则可以直接引用系统中提供的函数式接口。
系统中专门提供有一个java.util.function的开发包,里面可以直接使用函数式接口,在这个包中有如下核心接口提供使用:
- 功能型函数式接口
- 消费型函数式接口:只能进行数据处理,而没有返回。
- 供给型函数式接口:没有接收参数,但是有返回。
- 断言型函数式接口:进行判断处理。