[Java] 回调函数

回调函数

除了一些函数中存在固定的代码以外,还有一部分是根据实际的业务来写不同的代码,而这一块的内容最适合用回调函数来代替。回调函数相当于一个占位符,这里的代码由调用者传递执行,回调函数可以提升函数的重用率。

定义回调函数

定义回调函数的接口,接口只提供一个抽象函数,具体实现由实体业务来决定:

interface Callable {
	void append(FileWriter fw);
}

在普通的类中某个函数参数中添加该回调函数的接口,调用者通过 new 接口并实现抽象函数,被回调函数暂时替代的地方就换成了具体的业务代码:

public class WriteText {

  public void write(String filename, Callable callable) {
    FileWriter fw;
    try {
      fw = new FileWriter(filename, true);
      callable.append(fw);
      fw.flush();
      fw.close();
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
  }

}

测试回调函数

Lambda 简写形式:

public static void main(String[] args) {
  WriteText wt = new WriteText();
  wt.write("E:\\Common\\Document\\Person\\fw.txt", fw -> {
    try {
      fw.write("\n");
      fw.write("时间:" + new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒").format(new Date()));
      fw.write("\n");
      fw.write("事情:打豆豆");
      fw.write("\n");
      fw.write("-----------------");
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
  });
}

不管 5~10 行代码怎么变化,都不影响实例化输出流、关闭输出流等操作。下面是不使用 lambda 表达式的写法:

  public static void main(String[] args) {
    WriteText wt = new WriteText();
    wt.write("E:\\Common\\Document\\Person\\fw.txt", new WriteTextCallable() {
      @Override
      public void append(FileWriter fw) {
        try {
          fw.write("\n");
          fw.write("时间:" + new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒").format(new Date()));
          fw.write("-----------------");
        } catch (IOException e) {
          throw new RuntimeException(e);
        }
      }
    });
  }
posted @   Himmelbleu  阅读(150)  评论(0编辑  收藏  举报
首页
随笔
博客园
我的
标签
管理
[Java] 回调函数
发表于 2022-06-29 17:27
|
已有 150 人阅读
|
留下 0 条评论
|
全文字数 ≈ 228字
标签:

回调函数

除了一些函数中存在固定的代码以外,还有一部分是根据实际的业务来写不同的代码,而这一块的内容最适合用回调函数来代替。回调函数相当于一个占位符,这里的代码由调用者传递执行,回调函数可以提升函数的重用率。

定义回调函数

定义回调函数的接口,接口只提供一个抽象函数,具体实现由实体业务来决定:

JAVA
interface Callable {
	void append(FileWriter fw);
}

在普通的类中某个函数参数中添加该回调函数的接口,调用者通过 new 接口并实现抽象函数,被回调函数暂时替代的地方就换成了具体的业务代码:

JAVA
public class WriteText {

  public void write(String filename, Callable callable) {
    FileWriter fw;
    try {
      fw = new FileWriter(filename, true);
      callable.append(fw);
      fw.flush();
      fw.close();
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
  }

}

测试回调函数

Lambda 简写形式:

JAVA
public static void main(String[] args) {
  WriteText wt = new WriteText();
  wt.write("E:\\Common\\Document\\Person\\fw.txt", fw -> {
    try {
      fw.write("\n");
      fw.write("时间:" + new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒").format(new Date()));
      fw.write("\n");
      fw.write("事情:打豆豆");
      fw.write("\n");
      fw.write("-----------------");
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
  });
}

不管 5~10 行代码怎么变化,都不影响实例化输出流、关闭输出流等操作。下面是不使用 lambda 表达式的写法:

JAVA
  public static void main(String[] args) {
    WriteText wt = new WriteText();
    wt.write("E:\\Common\\Document\\Person\\fw.txt", new WriteTextCallable() {
      @Override
      public void append(FileWriter fw) {
        try {
          fw.write("\n");
          fw.write("时间:" + new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒").format(new Date()));
          fw.write("-----------------");
        } catch (IOException e) {
          throw new RuntimeException(e);
        }
      }
    });
  }
作者:Himmelbleu
出处: https://www.cnblogs.com/Himmelbleu/#/p/16424285
版权:本作品采用「 署名-非商业性使用-相同方式共享 4.0 国际 」许可协议进行许可。
文章目录
回调函数
定义回调函数
测试回调函数
点击右上角即可分享
微信分享提示