廖老师,请问这一节提到的jdbcTemplate的回调是怎么一回事呢
Topic source写个计算个税的计算器:
public class TaxTemplate {
public double getTax(double total, Callable<Double> taxBase) {
return (total - taxBase()) * 0.1;
}
}
传入的Callable就是回调,具体返回啥,由调用者决定
你再对比JdbcTemplate:
public Object queryForObject(String sql, RowMapper mapper) {
try (conn = connect(...)) {
try (Statement st = conn.createStatement(sql)) {
try (ResultSet rs = st.executeQuery()) {
if (rs.next()) {
return mapper.mapRow(rs);
}
}
}
}
}
那个RowMapper就是回调,如何把ResultSet变成Object,调用者自己决定
知乎上有个回答讲得挺好,可以去看下
回调函数(callback)是什么?
我简单说一下我的理解
回调函数首先是个函数(方法),有函数就是为了被调用,回调函数就是与直接调用的函数不相同另一类函数。
拿这一节第一个函数——JdbcTemplate.execute(ConnectionCallback<User> action)来说,这里是阻塞式回调(参考链接内容),有三个参与者或者说对象,运行环境,被调用的库(jdbcTemplate),包含了传入的回调函数的action。而回调函数就是在被运行环境借action传入到JdbcTemplate之后,由JdbcTemplate回过头来调用的,即所谓回调。
我猜你可能还是对函数式编程没太理解,把action单独声明之后在传入就清楚很多。
廖老师的例子,就是调用者函数,和被调函数这两个,,,将被调函数当做参数传入调用者函数,具体返回什么由调用者函数内部进行处理,其实就是函数式编程的一个典型例子,就是函数可以作为参数传入另一个函数
终于明白了。。。
感觉java还是麻烦,层级看的人比较晕,,看了python的函数式编程那个章节再理解java的就很清楚了,java的各种返回类型还有花括号看的人真的头晕,如果不是因为工作,还是喜欢用python
- 1
wangzezhong00
前面好像没有提到过java的回调机制吧,我从网上查了查回调, 也没看出这里是怎样用回调的