JDK1.8特性[1]接口默认方法与静态方法
说明:接口中方法有默认实现,子类实现接口时可以不用重写。是静态方法,通过调用。
运行结果:
Lambda表达式
Lambda表达式实例
说明:类似于JavaScript中的箭头表达式和python中的lambda表达式。在本例中通过Lambda表达式实现对pets列表排序,与以前的方法对比,代码更精简,可读性更好。(方便多了!)
运行结果:
Lambda表达式语法
基本语法:`左侧 -> 右侧 `
:Lambda表达式参数列表
:箭头操作符/Lambda操作符
:Lambda方法体
语法格式1:无参数,无返回值
语法格式2:有1个参数,无返回值
语法格式3:多于2个参数,有返回值,Lambda方法体中多条语句
语法格式4:Lambda体中只有一条语句时可省略return和大括号,参数列表数据类型可省略,JVM自动类型推断
函数式接口
Lambda在Java类型系统中的实现为:每个Lambda表达式都对应一个类型,通常是接口类型。函数式接口是指仅包含一个抽象方法的接口,每一个该类型对应的Lambda表达式都会匹配到这个抽象方法。(可以添加@FunctionalInterface注解,编译器如果发现该注解标注的接口多余1个抽象方法会报错。)
Java8中四大核心函数式接口
举个例子
说明:接口定义中的T、R为范型。定义consumer为控制台输出方法,supplier为获取系统当前纳秒数方法,function为将字符串转为整数方法,predicate为判断字符串x是否为空的断言方法。
运行结果:
关于上述例子的另一种写法
说明:Java8中允许来传递方法或构造函数引用,但需要保证方法参数类型、返回值类型兼容。
Lambda作用域
在Lambda表达式中访问外部作用域的方式与匿名对象很类似,可以直接访问标记了final的外部局部变量,或实例的字段以及静态变量。
反馈与建议
领取专属 10元无门槛券
私享最新 技术干货