-
什么是函数式接口?
如果一个接口中只声明了一个抽象方法,那么此接口就称为函数式接口。 -
定义一个函数式接口
@FunctionalInterface 注解来检查是否是一个函数式接口。
@FunctionalInterface
public interface FuncInterface(){
void test();
}
-
函数式接口规范
3.1 @FunctionalInterface标识为一个函数式接口,只能用在只有一个抽象方法的接口上。
3.2 接口中的静态方法、默认方法、覆盖了Oject类的方法都不算抽象方法。
3.3 @FunctionalInterface注解不是必须的,如果改接口只有一个抽象方法可以不写,他默认就是函数式接口,但是建议都写上该注解,编译器会检查该接口是否符合函数式接口的规范。 -
用途
用于lamdba表达式。
例如:
Thread t = new Thread(()->System.out.println("t")));
- 举例
5.1 正确的函数式接口
@FunctionalInterface
public interface FuncInterface(){
void test();
}
@FunctionalInterface
public interface FuncInterface(){
void test();
public boolean equals(Object object);// 覆盖Object中的方法
public default void test2(){
// 默认方法
}
public static void test2(){
// 静态方法
}
}
5.2 错误的函数式接口
有两个抽象方法,用@FunctionalInterface注解编译报错
@FunctionalInterface
public interface FuncInterface(){
void test();
void test2();
}
有两个抽象方法,没有用@FunctionalInterface注解标识,不能用于lamdba表达式
public interface FuncInterface(){
void test();
void test2();
}
没有抽象方法,用@FunctionalInterface注解编译报错
@FunctionalInterface
public interface FuncInterface(){
}
网友评论