第1页
第2页
Java SE 8 中的 55 个新特性(计划 B 的第 2 部分)
Simon Ritter
Java 技术宣讲师
Twitter:@speakjava
Java 技术宣讲师
Twitter:@speakjava
第3页
以下内容旨在概述产品的总体发展方向。该内容仅供参考,不可纳入任何合同。其内容不构成提供任何材料、代码或功能的承诺,并且不应该作为制定购买决策的依据。
此处所述有关 Oracle 产品的任何特性或功能的开发、发布以及相应的日程安排均由 Oracle 自行决定。
此处所述有关 Oracle 产品的任何特性或功能的开发、发布以及相应的日程安排均由 Oracle 自行决定。
第4页
重要免责声明
Java SE 8 规范不是最终的
某些特性如有更改,恕不另行通知
某些特性尚未实现
Java SE 8 规范不是最终的
某些特性如有更改,恕不另行通知
某些特性尚未实现
第5页
Java SE 8 (JSR 337)
新功能
JSR 308:类型的批注
JSR 310:日期和时间 API
JSR 335:Lambda 表达式
更新的功能
JSR 114:JDBC 行集
JSR 160:JMX 远程 API
JSR 199:Java 编译器 API
JSR 173:XML 的流 API
JSR 206:Java API for XML Processing
JSR 221:JDBC 4.0
JSR 269:可插拔的批注处理 API
JSR 308:类型的批注
JSR 310:日期和时间 API
JSR 335:Lambda 表达式
更新的功能
JSR 114:JDBC 行集
JSR 160:JMX 远程 API
JSR 199:Java 编译器 API
JSR 173:XML 的流 API
JSR 206:Java API for XML Processing
JSR 221:JDBC 4.0
JSR 269:可插拔的批注处理 API
组件 JSR
第6页
JDK 增强建议 (JEP)
定期更新的建议清单
充当 JDK 发行项目的长期路线图
路线图至少维持 3 年
增强建议的统一格式和集中存档
相关方可查找、读取、评论并提出建议
流程面向每个 OpenJDK Committer 开放
增强是对 JDK 代码库的重要修改
两周或数周的工程投入
对 JDK 或开发流程和基础架构的重大更改
对开发人员或客户的要求更高
充当 JDK 发行项目的长期路线图
路线图至少维持 3 年
增强建议的统一格式和集中存档
相关方可查找、读取、评论并提出建议
流程面向每个 OpenJDK Committer 开放
增强是对 JDK 代码库的重要修改
两周或数周的工程投入
对 JDK 或开发流程和基础架构的重大更改
对开发人员或客户的要求更高
第7页
语言
第8页
Lambda 表达式
Lambda 表达式向 Java 提供匿名函数类型
替换单一抽象方法类型的使用
替换单一抽象方法类型的使用
闭包和功能编程
public interface DoStuff {
boolean isGood(int x);
}
void doSomething(DoStuff d) {
if (d.isGood(myVariable))
...
}
doSomething(answer -> answer == 42);
boolean isGood(int x);
}
void doSomething(DoStuff d) {
if (d.isGood(myVariable))
...
}
doSomething(answer -> answer == 42);
JEP126
第9页
扩展方法
提供相应机制将新方法添加到现有接口
未破环向后兼容性
为 Java 提供行为及类型(而不是状态!)的多继承
未破环向后兼容性
为 Java 提供行为及类型(而不是状态!)的多继承
将(功能)的多个继承带到 Java
public interface Set extends Collection {
public int size();
... // The rest of the existing Set methods
public T reduce(Reducer r)
default Collections.setReducer;
}
public int size();
... // The rest of the existing Set methods
public T reduce(Reducer r)
default Collections.setReducer;
}
JEP126
第10页
针对 Java 类型的批注
批注当前只能用在类型声明上
类、方法、变量定义
所有类型放置位置的扩展
例如,参数
允许通过可插入的类型检查器进行错误检测
例如,空指针错误、争用条件等
类、方法、变量定义
所有类型放置位置的扩展
例如,参数
允许通过可插入的类型检查器进行错误检测
例如,空指针错误、争用条件等
public void process(@notnull List data) {…}
JEP104
第11页
归纳式目标类型推断
基本数据类型的可用性得到改进
class List {
static List nil() { ... };
static List cons(Z head, List tail) { ... };
E head() { ... }
}
static List nil() { ... };
static List cons(Z head, List tail) { ... };
E head() { ... }
}
List ls = List.nil(); // Inferred correctly
List.cons(42, List.nil());
错误:预期List,发现List