原文地址为: Java 回调函数(传统方法和lambda方法)-一个例子秒懂

背景:
想写一个工具类 Tool.java ,其中方法 public void readOneLine() 负责一行一行地读文件,然后根据不同的业务,对每一行进行不同处理。最后输出到文件 out.txt

那么问题来了,根据不同的业务,进行不同处理 怎么实现?

自然而然想到,每个业务有一个对读取的一行的处理方法 public void 业务名(),我们把方法作为参数传入 public void readOneLine(业务名()),比如:

业务A:readOneLine(直接输出每一行())业务B:readOneLine(每一行全部大写后输出())业务C:readOneLine(输出每一行的第一个单词())......

很可惜,java 7不支持这样的语法,也许java 8 的 lambda 表达式可以?这不在今天讨论的范围里

java 7 要实现这样的功能需要通过回调函数

回调函数 - A类中调用B类中的某个方法methodB(),然后 methodB() 中反过来调用A类中的methodA()。methodA()这个方法就叫回调函数

一个同步回调函数的例子

回调函数接口,这个接口是必须的吗?
是。不仅为了符合面向接口编程的规范
事实上,调用方将会 Override 接口的 具体业务逻辑(),达到传函数给被调用方的目的。

//回调函数接口及方法 public interface 业务逻辑 {   public void 具体业务逻辑();    } 
public class Tool {  private 业务逻辑 yewuluoji;  //私有接口成员 public void setYewuluoji(业务逻辑 yewuluoji){this.yewuluoji = yewuluoji;  }public void 工具类逻辑() {//读文件while(每一行){            yewuluoji.具体业务逻辑();        }    }  }  

测试类:

public class MainClass {  public MainClass() {    }  public static void main(String[] args) {      Tool tool = new Tool();  //传入 匿名实现类,包含具体业务逻辑    tool.setCallback(new 业务逻辑{@Overridepublic void 具体业务逻辑() {//输出每一行的第一个单词      }    });

    tool.工具类逻辑(); //此方法中回调匿名类的具体业务逻辑(),即:输出每一行的第一个单词   }  }    

java 8 lambda方式传函数(仅仅是语法糖?)

匿名类型最大的问题就在于其冗余的语法。有人戏称匿名类型导致了“高度问题”(height problem):比如前面ActionListener的例子里的五行代码中仅有一行在做实际工作。

lambda表达式是匿名方法,它提供了轻量级的语法(语法糖?),从而解决了匿名内部类带来的“高度问题”。

下面是一些lambda表达式:

(int x, int y) -> x + y() -> 42(String s) -> { System.out.println(s); }

lambda表达式的语法由参数列表箭头->(等价于return)函数体组成。函数体既可以是一个表达式,也可以是一个语句块:

lambda表达式也会经常出现在嵌套环境中,比如说作为方法的参数。为了使lambda表达式在这些场景下尽可能简洁,我们去除了不必要的分隔符。不过在某些情况下我们也可以把它分为多行,然后用括号包起来,就像其它普通表达式一样。

下面是一些出现在语句中的lambda表达式:

FileFilter java = (File f) -> f.getName().endsWith("*.java");

String user = doPrivileged(() -> System.getProperty("user.name"));

new Thread(() -> {  connectToService();  sendNotification();}).start();

转载请注明本文地址: Java 回调函数(传统方法和lambda方法)-一个例子秒懂

Java 回调函数(传统方法和lambda方法)-一个例子秒懂相关推荐

  1. java——Scanner中nextLine()方法和next()方法的区别

    遇到一个有意思的东西,在整理字符串这块知识的时候,发现我在用Scanner函数时,在字符串中加入空格,结果空格后面的东西没有输出来(/尴尬),不多说直接上代码: import java.util.Sc ...

  2. Java并发编程—schedule方法和scheduleAtFixedRate方法的区别

    原文作者:一叶丿清风 原文地址:schedule方法和scheduleAtFixedRate方法的区别 schedule方法和scheduleAtFixedRate方法都可以实现任务的延时和不延时执行 ...

  3. 普歌-码灵团队-java中的equals方法和toString方法及总结

    普歌-码灵团队:Object类中的方法介绍及其用法 一.Object类 二.方法介绍 1.toString方法 2.重写equals方法: 3. 拓展 三.总结 一.Object类的简单介绍 二.Ob ...

  4. Java类型转换中valueOf方法和parseInt方法的区别

    在Java的类型转换中,我们经常会使用valueOf或者parseInt(parseFloat/parseDouble等)来转换.这二者有什么区别呢?我们看如下的代码: String inputVal ...

  5. Java中的compare方法和conpareTo方法使用详解

    一.compare方法 一般用在优先级队列和重写Arrays.sort中,新建比较器,重写compare方法 1.1 优先级队列中使用(比较器后一个元素为大的) 例如:使用小顶堆找最大TopK就构造了 ...

  6. flush方法和close方法的区别

    package com.learn.Demo05Writer;import java.io.FileWriter; import java.io.IOException;/*flush方法和close ...

  7. Java 8 辣么大(lambda)表达式不慌之—–(四)示例-Collectors中的中的joining 方法和mapping方法

    Java 8 辣么大(lambda)表达式不慌之-–(四)示例-Collectors中的joining 方法和mapping方法 joining 方法 mapping方法 先定义好后面做示例要用的数据 ...

  8. java重写6,java重写equals()方法和hashCode()方法

    1.equals()方法和hashCode()方法是什么? equals()和hashCode()都是是Java中万物之源Object类中的方法: equals方法用于比较两个对象是否相同,Objec ...

  9. Java hashCode()方法和equals()方法

    hashCode方法和equals方法之间的关系: equals方法指示其他一个对象和此对象是否相等.在Object类中定义如下: public boolean equals(Object obj) ...

最新文章

  1. poj3565(最大权完美匹配)
  2. python拷贝文件函数_Python Set集合,函数,深入拷贝,浅入拷贝,文件处理
  3. loadrunner录制事件为0_Oracle数据库性能监控|LoadRunner 中配置监控Oracle
  4. spark任务shell运行_大数据系列:Spark的工作原理及架构
  5. zabbix 自定义探索规则发现服务器上面的kvm虚拟机和对应的网卡
  6. byte转换为string乱码_每日一课 | 如何将int转换为String
  7. unittest-ddt报错AttributeError: type object ‘forTestDDT‘ has no attribute ‘test_2‘
  8. 学习MySQL / MariaDB初学者 - 第1部分
  9. 5,线程池,进程池,协程,IO模型
  10. 【kafka】kafka record is corrupt(记录损坏)
  11. ASP.NET中 CheckBox(复选框)的使用
  12. Excel学习笔记之基础篇
  13. java爬取闲鱼商品信息(一)
  14. application.yaml配置详解
  15. 快慢指针慢指针和快指针一定会相遇
  16. python 线程安全队列_Python实现线程安全队列
  17. linux给串口赋予权限
  18. 计算机视觉入门知识一:数据分类基础 (李飞飞斯坦福计算机视觉课程)
  19. 怎样才能批量查询网站的谷歌PR权重?把手教你批量查询网站谷歌PR权重值
  20. IDA7.0 MacOS报错Oops,IDA has almost crashed!解决方案

热门文章

  1. ill-posed problem,regularized method,正则化参数的选取
  2. 单源最短路的建图方式(Dijkstra)
  3. 知其然也要知其所以然---Kernel上报电量UEvent事件流程分析
  4. 龙芯可以运行linux吗,开源的龙芯主板可顺利启动Linux系统
  5. 官宣!首个大模型兴趣小组开放申请,专注大模型应用落地
  6. python打印字符串格式_Python字符串三种格式化输出
  7. NX二次开发-输入X向量Y向量输出一个3*3矩阵UF_MTX3_initialize
  8. Ubuntu系统上远程桌面,samba,ftp,vncserver,ssh服务器,teamviewer安装配置
  9. Orcad BOM整理与核实的方法
  10. mfc创建excel如何另存为_MFC实现excel的读写操作