【Java题】模拟下载进度条

目录

一:题目

二:解析

1.匿名内部类

2.lambda

三:结果 


一:题目

使用匿名内部类,模拟下载过程进度条,体会回调函数的作用。
1. 定义 DownloadListener 接口,包含一个包含 void  progressUpdate( int progress);
2. 定义 Download 下载类;
3. 测试类 TestDownload ,实例化 Download 并给出匿名内部类完成
进度显示;
4. lambda 表达式改写该匿名内部类。

二:解析

1.匿名内部类

匿名内部类的好处就是可以使代码可以更简洁,可以在一个类声明的同时创建该类的实例。当某个本地类只使用一次的时候,可以把它定义为匿名类

【Java题】模拟下载进度条_第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+"%"));

    }
}

你可能感兴趣的:(Java,java,开发语言)