一、函数式接口
在jdk8中什么是函数式接口:
- 被@FunctionalInterface注解修饰的。
- 接口里边只有一个非default的方法。
满足以上2个条件的即为函数式接口,ps:即使一个接口没有@FunctionalInterface修饰,但是满足2,那么这样的接口也会是函数式接口。

二、函数式接口的特点
- 接口有且仅有一个抽象方法,如上图的抽象方法compare
- 允许定义静态非抽象方法
- 允许定义默认defalut非抽象方法(default方法也是java8才有的,见下文)
- 允许java.lang.Object中的public方法,如上图的方法equals。
- FunctionInterface注解不是必须的,如果一个接口符合"函数式接口"定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错
情况一
- 接口有且仅有一个抽象方法,且加上了@FunctionInterface注解
@FunctionalInterface
public interface test_lamda {
void show();
}
public class test {
public static void main(String[] args) {
test_lamda test_lamda=()->{
System.out.println("test");
};
test_lamda.show();
}
}
情况二
- 接口有且仅有一个抽象方法,且没有加上了@FunctionInterface注解
public interface test_lamda {
void show();
}
public class test {
public static void main(String[] args) {
test_lamda test_lamda=()->{
System.out.println("test");
};
test_lamda.show();
}
}
情况三
- 使用java.lang.Object中的public方法
public interface test_lamda {
void show();
boolean equals(Object obj);
}
public class test {
public static void main(String[] args) {
test_lamda test_lamda=()->{
System.out.println("test");
};
test_lamda.show();
}
}
情况四
定义静态抽象方法,定义default
public interface test_lamda {
void sho

本文介绍了Java8中的函数式接口,包括其特点、Lambda表达式的概念、语法以及常见的函数式接口如Supplier、Consumer、Predicate和Function的应用。同时,对比了Lambda表达式与匿名内部类的区别,展示了其在简化代码中的优势。
最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



