匿名内部类的好处和弊端
一方面,匿名内部类省去了实现类的定义;另一方面,匿名内部类语法过于复杂
比如创建匿名创建线程的例子:
public class Demo {
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("多线程任务执行!");
}
}).start();
}
}
仔细分析该代码中的语义, Runnable 接口只有一个 run 方法的定义: public abstract void run();
即制定了一种做事情的方案(其实就是一个函数):
- 无参数:不需要任何条件即可执行该方案。
- 无返回值:该方案不产生任何结果。
- 代码块(方法体):该方案的具体执行步骤。
同样的语义体现在 Lambda 语法中,要更加简单:
() ‐> System.out.println(“多线程任务执行!”)
- 前面的一对小括号即 run 方法的参数(无),代表不需要任何条件;。
- 中间的一个箭头代表将前面的参数传递给后面的代码。
- 后面的输出语句即业务逻辑代码。
Lambda表达式的标准格式为:
(参数类型 参数名称) ‐> { 代码语句 }
所以匿名创建线程的代码就可以简化成
public class Demo {
public static void main(String[] args) {
new Thread(() -> {
System.out.println("多线程任务执行!");
}
}).start();
}
}