为什末要学习Lambda表达式?
我们在公司的代码块中会经常观察到它的踪迹,如果没有对lambda表达式的深入了解,就会感到很吃力。作为JAVA8的一种新特性,lambda表达式很好地简化了接口实现的流程。我们一般来说接口实现有以下两种方式:
1.接口内部类:
2.接口外部定义类实现:
实际上对于这部分内容我们可以简单地通过lambda表达式来实现:
然而实际上不是所有的接口类型都可以进行lambda表达式的简化:这里也就提出了我们要讲到的函数式接口,本篇文章主要讨论我们经常遇到的接口类型并讨论其是否为函数式接口。
一.函数式接口的定义
函数式接口是仅包含一个必须实现的抽象方法的接口,下面对以下几种情况进行判断:
//1.这个接口中方法只有一个且为必须实现的,因此是一个函数式接口
interface Test1{
void test();
}
//2.显而易见,两个必须实现的方法所以不是函数式接口
interface Test2{
void test1();
void test2();
}
//3.这个接口中虽然没有定义方法但是可以从父类继承过来一个所以是!
interface Test3 extends Test1{
}
//4.这里引入了JAVA8的另外一个新特性default修饰符,为了是接口中实现非抽象方法(为了不改变JAVA实现框架)
//所以这里也是只有一个必须要实现的抽象方法,是函数式接口!
interface Test4{
void test4();
default void test(){}
}
//5.静态方法不用重写,本身也有方法体,所以该接口还是函数式接口!
interface Test5{
void test5();
static void testt(){}
}
//6.重点!toString方法是从Object类继承过来的,所以不用重写,所以本接口依旧是一个函数式接口
interface Test6{
void test6();
String toString();
}
懂得什么是函数式接口之后,我们下一篇将要讨论lambda表达式的语法表达,真正进入lambda表达式的学习过程中。