jdk8新特性:Lambda表达式(也称为闭包、可传递的匿名函数)与函数式接口@FunctionalInterface
2017-11-12 16:31
1256 查看
1) 一个lambda可以由用逗号分隔的参数列表、–>符号与函数体三部分表示。例如:
ex.1
ex.2
上面是一个lambda表达式,等价于匿名内部类:
使用场景:上面和匿名内部类的对比,不难发现,在一些需要使用匿名内部类的地方,就可以用lambda代替。Java8中,对lambda的使用做了引导和规范,一般在函数式接口上使用lambda。
2)Functional接口
@FunctionalInterface标记在接口上,“函数式接口”是指仅仅只包含一个抽象方法的接口,该注解有以下特点:
1、该注解只能标记在"有且仅有一个抽象方法"的接口上。
2、JDK8接口中的静态方法和默认方法,都不算是抽象方法。
3、接口默认继承java.lang.Object,所以如果接口显示声明覆盖了Object中方法,那么也不算抽象方法。
4、该注解不是必须的,如果一个接口符合"函数式接口"定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错。
ex:
ex.1
Arrays.asList( "a", "b", "d" ).forEach( e -> System.out.println( e ) );
ex.2
(Computer c1, Computer c2) -> c1.getPrice().compareTo(c2.getPrice());
上面是一个lambda表达式,等价于匿名内部类:
new Comparator<Computer>() { @Override public int compare(Computer c1, Computer c2) { return c1.getPrice().compareTo(c2.getPrice()); } };
使用场景:上面和匿名内部类的对比,不难发现,在一些需要使用匿名内部类的地方,就可以用lambda代替。Java8中,对lambda的使用做了引导和规范,一般在函数式接口上使用lambda。
2)Functional接口
@FunctionalInterface标记在接口上,“函数式接口”是指仅仅只包含一个抽象方法的接口,该注解有以下特点:
1、该注解只能标记在"有且仅有一个抽象方法"的接口上。
2、JDK8接口中的静态方法和默认方法,都不算是抽象方法。
3、接口默认继承java.lang.Object,所以如果接口显示声明覆盖了Object中方法,那么也不算抽象方法。
4、该注解不是必须的,如果一个接口符合"函数式接口"定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错。
ex:
@FunctionalInterface public interface TestInterface { double calculate(int a); // double calculate2(int a); default double sqrt(int a) { return Math.sqrt(a); } default double sqrt2(int a) { return Math.sqrt(a); } static void staticMethod() { System.out.println("接口中的静态方法1"); } // default修饰符定义默认方法 default void defaultMethod() { System.out.println("接口中的默认方法1"); }
相关文章推荐
- Java8 新特性----函数式接口,以及和Lambda表达式的关系
- java8新特性(一)之Lambda表达式和函数式接口
- Java8特性总结(二)Lambda表达式,函数式接口,方法引用
- JDK 8.0 新特性——函数式接口和Lambda 表达式
- Java8新特性Lambda表达式、函数式接口
- Java8 新特性之一---------Lambda表达式和函数式接口
- lambda表达式 + 匿名函数 + 函数式编程 + 闭包 + 装饰器
- java8新特性之函数式接口、lambda表达式、接口的默认方法、方法和构造函数的引用
- java8新特性lambda表达式, 函数式接口以及Steam流和新的日期时间例子代码
- JDK8 注解:函数式接口@FunctionalInterface
- JDK 8.0 新特性——函数式接口和Lambda 表达式
- JDK8新特性:函数式接口@FunctionalInterface的使用说明
- 扫盲贴(一)——JDK8新特性:Lambda表达式入门
- Java学习笔记-Lambda表达式及內建函数式接口
- JDK8新特性学习(一) Lambda表达式和函数式接口
- java 函数式接口与lambda表达式的关系
- JDK8新特性之函数式接口
- Java8新特性小结-接口与Lambda表达式
- java1.8 lambda表达式 函数式编程 闭包
- JDK8新特性之Lambda表达式