《Java 8 in Action》Chapter 8:重构、测试和调试
我们会介绍几种方法,帮助你重构代码,以适配使用Lambda表达式,让你的代码具备更好的可读性和灵活性。除此之外,我们还会讨论目前比较流行的几种面向对象的设计模式,
包括策略模式、模板方法模式、观察者模式、责任链模式,以及工厂模式,在结合Lambda表达式之后变得更简洁的情况。最后,我们会介绍如何测试和调试使用Lambda表达式和Stream API的代码。
1. 为改善可读性和灵活性重构代码
1.1 改善代码的可读性
Java 8的新特性也可以帮助提升代码的可读性:
- 使用Java 8,你可以减少冗长的代码,让代码更易于理解
- 通过方法引用和Stream API,你的代码会变得更直观
利用Lambda表达式、方法引用以及Stream改善程序代码的可读性:
- 重构代码,用Lambda表达式取代匿名类
- 用方法引用重构Lambda表达式
- 用Stream API重构命令式的数据处理
1.2 从匿名内部类到Lambda表达式的转换
将实现单一抽象方法的匿名类转换为Lambda表达式
// 传统的方式,使用匿名类
Runnable r1 = new Runnable(){
public void run(){
System.out.println("Hello");
}
}
// 新的方式,使用Lambda表达式
Runnable r2 = () -> System.out.println("Hello");
匿名 类和Lambda表达式中的this和super的含义是不同的。在匿名类中,this代表的是类自身,但是在Lambda中,它代表的是包含类。其次,匿名类可以屏蔽包含类的变量,而Lambda表达式不能(它们会导致编译错误),如下面这段代码:
int a = 10;
Runnable r1 = () -> {
int a = 2; // 编译错误
System.out.println(a);
};
Runnable r2 = new Runnable() {
public void run() {
int a = 2; // 正常
System.out.println(a);
}
}
在涉及重