目录
一:题目
二:解析
1.匿名内部类
2.lambda
三:结果
一:题目
使用匿名内部类,模拟下载过程进度条,体会回调函数的作用。1. 定义 DownloadListener 接口,包含一个包含 void progressUpdate( int progress);2. 定义 Download 下载类;3. 测试类 TestDownload ,实例化 Download 并给出匿名内部类完成进度显示;4. 用 lambda 表达式改写该匿名内部类。
二:解析
1.匿名内部类
匿名内部类的好处就是可以使代码可以更简洁,可以在一个类声明的同时创建该类的实例。当某个本地类只使用一次的时候,可以把它定义为匿名类
2.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() {@Overridepublic void progressUpdate(int progress) {System.out.println("下载进度"+progress+"%");}});//2.lambdaDownload b=new Download((int progress)->{System.out.println("下载进度"+progress+"%");});//3.化简后的lambdaDownload c=new Download (progress-> System.out.println("下载进度"+progress+"%"));}
}