函数式接口
概述
-
Lambda表达式使用的前提,就是接口必须是一个函数式接口
- 定义:
如果在接口中,只有一个抽象方法,那么这个接口就是函数式接口
3.格式说明:
使用注解来检查当前接口是否是一个函数式接口
@FunctionalInterface
如果不是函数式接口,则编译报错
4.作用:
想表达的是一个方法的内容,由于方法不在任何类中,所以称为函数
接口其实想表达的就是一个函数的声明
将来使用这个接口的实现类对象,来表达一个函数的实现
Java中不支持将函数作为一个数据,也就不能将这个函数进行各种传递,也就不能作为对象的成员变量存在
只能在方法外加一层接口的声明,将来可以传递方法所在接口的实现类对象,来间接的传递方法内容
package com.cc.function_interface;
/*函数和方法的区别
* 函数:函数可以独立存在,不存在任何类中,(C语言中,没有对象和类的概念),Java中不支持,函数独立存在,需要进行包装
* 方法:是存在一个类中
* Lambda表达式使用的前提,就是接口必须是一个函数式接口
* 如果在接口中只有一个抽象方法,那么这个接口就是函数式接口
*
* */
public class Demo01 {
public static void main(String[] args) {
F2 f = get();
}
public static F2 get() {
F2 f = ()->System.out.println("666");
return f;
}
}
//不是函数式接口,加上注解会报错
//@FunctionalInterface
interface F1{
}
//通过注解可以判断是否是一个函数式接口
@FunctionalInterface
interface F2{
void run();
}
//有两个方法的也不是函数式接口,加上注解也会报错
//@FunctionalInterface
interface F3{
void method01();
void method02();
}
常用内置函数式接口
1、说明:
Java8中提供了一些常用的函数式接口,在使用类似功能的时候,不需要额外定义接口,直接使用jdk中提供的即可
2、罗列:
①Consumer<T>:消费型接口