Java SE之旅_10_回调函数

使用apache的开源工具dbutils时, 我们可以用QueryRunner很方便地进行数据库查询操作,将查到的数据封装到JavaBean对象中, 或是封装到存储多个JavaBean对象的集合框架中. 其中用到的一个重要接口是ResultHandler, 该接口是如何实现对JavaBean对象的封装的呢? 其原理其实是利用回调函数来完成的.


下面通过一个小例子展示一下如何使用回调函数.

1. 首先定义接口(该接口使用了泛型):

/**
 * 定义回调规范
 */
interface IHandler<T>{
	 T sayHi(String sql);
}

2. 再定义调用类, 其query方法接收一个实现了IHandler接口的对象, 在query方法体内调用IHandler的sayHi方法:

/**
 * 定义调用类
 */
class MyRunner {
	public <T>T query(String sql,IHandler<T> h){
		return h.sayHi(sql);
	}
}

3, 测试如何使用回调函数:

public class CallBackMethodDemo {

	/**
	 * 回调函数例子
	 */
	public static void main(String[] args) {
		MyRunner run = new MyRunner();
	    List<Map<String, Object>> list = run.query("yueyayun...",new IHandler<List<Map<String,Object>>>(){

			@Override
			public List<Map<String, Object>> sayHi(String sql) {
				Map<String,Object> map = new HashMap<String, Object>();
				map.put(sql, map);
				List<Map<String,Object>> ll = new LinkedList<Map<String,Object>>();
				ll.add(map);
				ll.add(new HashMap<String, Object>());
				return ll;
			}
			
		});
		System.out.println(list);
	}
}
 

从以上代码可以看到, 我们可以写多个实现了IHandler接口的具体类来完成各种的丰富功能, 在调用run.query方法时指定一个完成某项功能的IHandler接口实现类, 达到完成类似ResultHandler的效果.

建议有兴趣的同学看看apache的dbutils工具的源码, 它将有助于你深刻理解回调函数.



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值