1.Lambda表达式与Functional接口
lambda表达式由用逗号分隔的参数列表、–>符号与函数体三部分表示。例如:
Arrays.asList( "a", "b", "d" ).forEach( e -> System.out.println( e ) );
Functional接口 (函数式接口)
一个具有一个方法的普通接口,这样的接口可以隐式转换成lambda表达式;
函数式接口是容易出错的:如有某个人在接口定义中增加了另一个方法,这时,这个接口就不再是函数式的了,并且编译过程也会失败。为了克服函数式接口的这种脆弱性并且能够明确声明接口作为函数式接口的意图,Java 8增加了一种特殊的注解@FunctionalInterface(Java 8中所有类库的已有接口都添加了@FunctionalInterface注解)
@FunctionalInterface
public interface Functional {
void method();
}
[默认方法与静态方法]并不影响函数式接口的契约,
@FunctionalInterface
public interface FunctionalDefaultMethods {
void method();
default void defaultMethod() {
}
}
2.接口的默认方法与静态方法
Java 8用默认方法与静态方法这两个新概念来扩展接口的声明
可以使用default关键字在接口中定义一个默认方法;
接口的子类可以覆盖,也可以保持默认方法的原样
接口中还可以声明静态方法,并可以提供默认实现;
3.方法引用
可以使用像c++中那样用::调用方法;
4.java8中可以使用重复注解
5.更好的类型推测机制
6.扩展注解的上下文,局部变量、泛型类、父类与接口的实现,就连方法的异常也能添加注解
7.java类库的新特性
Optional、stream、date,time的api、JavaScript引擎Nashorn、Base64成为标准、并行(parallel)数组、并发(Concurrency)、Nashorn引擎: jjs、 类依赖分析器jdeps、 Java虚拟机(JVM)的新特性
网友评论