目录
一:题目
二:解析
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() {
@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+"%"));
}
}