目录
使用匿名内部类,模拟下载过程进度条,体会回调函数的作用。1. 定义 DownloadListener 接口,包含一个包含 void progressUpdate( int progress);2. 定义 Download 下载类;3. 测试类 TestDownload ,实例化 Download 并给出匿名内部类完成进度显示;4. 用 lambda 表达式改写该匿名内部类。
匿名内部类的好处就是可以使代码可以更简洁,可以在一个类声明的同时创建该类的实例。当某个本地类只使用一次的时候,可以把它定义为匿名类

(1)lambda表达式的简化格式
(匿名内部类被重写方法的形参列表)-> {
被重写方法的方法体代码
}
(2)lambda的省略规则:
1)参数类型可以不写
2)如果只有一个参数,参数类型可以省略,同时()也可以省略
3)如果lambda方法体只有一行:可以省略大括号不写,同时省略分号,如果这行代码是return,可以省略return
DownloadListener.java
- @FunctionalInterface
- public interface DownloadListener {
- void progressUpdate(int progress);
- }
Download.java
- public class Download {
- private DownloadListener downloadListener;
- public Download(){}
- public Download(DownloadListener downloadListener){
- this.downloadListener=downloadListener;
- }
- public void startDownload(){
- System.out.println("开始下载");
- for (int i = 0; i <=100; i+=10) {
- downloadListener.progressUpdate(i);
- }
- System.out.println("下载结束");
- }
-
- }
TestDownload.java
- public class TestDownload {
- public static void main(String[] args) {
- //1.匿名内部类
- Download a=new Download(new DownloadListener() {
- @Override
- public void progressUpdate(int progress) {
- System.out.println("下载进度"+progress+"%");
- }
- });
- //2.lambda
- Download b=new Download((int progress)->{
- System.out.println("下载进度"+progress+"%");
- });
- //3.化简后的lambda
- Download c=new Download (progress-> System.out.println("下载进度"+progress+"%"));
-
- }
- }