lambda表达式工作中会用到很多,但是一直理解的不是很透彻,只是知道可以这样写,能这样实现,但总是觉得似懂非懂,所以还是的好好了解了解。
首先我们先来看看没有lambda表达式之前如何实现利用Runnable开启一个线程
后面使用匿名内部类之后可以这样实现 等同于
很显然这种写法代码依然看起来很臃肿,所以lambda表达式出现了
可以看到Thread类构造器里面的的入参由最开始的实例对象,变成匿名内部类的实例,到最后的lambda表达式,看起来是将一个方法当作了入参,但是感觉并不是很准确,因为Thread类构造器里面的的入参还是Runnable的实例。
另外一个概念,函数式接口,接口用注解@FunctionalInterface表示
即接口里面只有一个抽象方法,注意这里的注解@FunctionalInterface只是做一个预校验,也就是说加了这个注解的接口如果里面出现了两个抽象方法,就会编译失败,注解本身没有其他作用,可有可无。
为什么只有函数式的接口能使用lambda表达式呢,因为() -> {} 已经简化了方法名和返回值,也只能重写一个方法,如果接口里面出现两个抽象方法也就无法区分和定义了