什么是回调?
维基百科是这样解释的:回调是一段可执行的代码通过参数传递给别一段代码,以期望在一个合适的时间调用这个参数(可执行的代码)。
回调的作用
- 避免重复代码
- 在你需要更多的通用功能的地方更好地实现抽象(可处理各种类型的对象和变量)
- 增强代码的可维护性
- 增强代码的可读性
- 有更多定制的功能
以“八仙过海”彰显回调之精髓
package org.zpli.java8.callback;
/**
* @Description: 接口(技术)
* @author: zpli
* @Date: 2020/3/19 15:32
*/
public interface Magic {
void doMagic();
}
package org.zpli.java8.callback;
/**
* @Description: 神仙类
* @author: zpli
* @Date: 2020/3/19 15:35
*/
public class Immortal {
private String name;
public Immortal(String name){
this.name = name;
}
public void crossingSea(Magic magic){
System.out.print(name);
magic.doMagic();
System.out.println("过海。。。");
}
}
package org.zpli.java8.callback;
/**
* @Description: 函数调用类
* @author: zpli
* @Date: 2020/3/19 15:38
*/
public class MainCls {
public static void main(String[] args) {
Immortal tieGuaili = new Immortal("铁拐李");
// 不使用lambda表达式
// 参数化函数
tieGuaili.crossingSea(new Magic() {
@Override
public void doMagic() {
System.out.print("骑着葫芦");
}
});
// 使用lambda表达式
// tieGuaili.crossingSea(() -> System.out.print("骑着葫芦"));
Immortal zhangGuoLao = new Immortal("张果老");
zhangGuoLao.crossingSea(() -> System.out.print("骑着毛驴"));
Immortal heXianGu = new Immortal("何仙姑");
heXianGu.crossingSea(() -> System.out.print("踩着荷叶"));
Immortal hanXiangzi = new Immortal("韩湘子");
hanXiangzi.crossingSea(() -> System.out.print("用笛子变成浮木"));
Immortal liDongBin = new Immortal("吕洞宾");
liDongBin.crossingSea(() -> System.out.print("踩着宝剑"));
Immortal lanCaiHe = new Immortal("蓝采和");
lanCaiHe.crossingSea(() -> System.out.print("坐着花篮"));
Immortal hanZhongLi = new Immortal("汉钟离");
hanZhongLi.crossingSea(() -> System.out.print("使用芭蕉扇"));
Immortal caoGuoJiu = new Immortal("曹国舅");
caoGuoJiu.crossingSea(() -> System.out.print("使用阴阳玉板"));
}
}
结果如下:
铁拐李骑着葫芦过海。。。
张果老骑着毛驴过海。。。
何仙姑踩着荷叶过海。。。
韩湘子用笛子变成浮木过海。。。
吕洞宾踩着宝剑过海。。。
蓝采和坐着花篮过海。。。
汉钟离使用芭蕉扇过海。。。
曹国舅使用阴阳玉板过海。。。

1417

被折叠的 条评论
为什么被折叠?



