🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[success] # java 回调模式 1. **回调模式**——如果一个方法的**参数是接口类型**,则在调用该方法时,需要创建并传递一个实现此接口类型的对象;而该方法在运行时会调用到参数对象中所实现的方法(接口中定义的)。 * 实现方式 1. 自定义类实现接口/继承类并重写方法,然后创建该类对象作为实参传递 2. 使用上述匿名内部类的语法格式得到接口/类类型的引用即可 >[danger] ##### 案例 * 定义类中方法调用是接口类型 ~~~ public class FunInner { // 调用接口类型给 public void show(AnonymousInterface ai) { ai.show(); } public static void main(String[] args) { FunInner funInner = new FunInner(); funInner.show(new AnonymousImpl()); } } ~~~ * 定义接口 ~~~ public interface AnonymousInterface { // 自定义抽象方法 public abstract void show(); } ~~~ * 实现接口 ~~~ public class AnonymousImpl implements AnonymousInterface { public void show() { System.out.println("aaa"); } } ~~~ >[info] ## 使用匿名内部类 * 接口/父类类型 引用变量名 \= new 接口/父类类型() { 方法的重写 } >[danger] ##### 案例二 * 不想为此单独实现一个接口类,使用匿名函数形式 ~~~ public class FunInner { // 调用接口类型给 public void show(AnonymousInterface ai) { ai.show(); } public static void main(String[] args) { FunInner funInner = new FunInner(); AnonymousInterface aInterface = new AnonymousInterface() { public void show() { } }; funInner.show(aInterface); } } ~~~ * 使用**lamda**表达式可以简化上述代码,格式为:(参数列表) -> {方法体} ~~~ public class FunInner { // 调用接口类型给 public void show(AnonymousInterface ai) { ai.show(); } public static void main(String[] args) { FunInner funInner = new FunInner(); AnonymousInterface ait2 = () -> System.out.println("lamda表达式"); funInner.show(ait2); } } ~~~