java函数回调

      最常见的是JavaScript的ajax的回调,经常会把人整蒙,其实java中的回调如果应用的好,其实感觉也会有一种精妙 的使用感觉,回味无穷,比如像我们国美的Redis 调用封装,有一个redis template,

         在一个类有一个 执行方法A,方法的参数就是一个 接口b,那他在调用这个接口b的时候其实就是在使用接口 方法C,重写 接口的方法C,这个方法C的返回值就是回调值,C的返回值 又被A使用,A调用结束后返回 A的返回值。

下面代码演示 

A 对应 SimpleJedisTemplate中的  execute()()

b 对应  接口RedisCallback

C 对应 接口RedisCallback 中 doInRedis(方法)

调用过程 对应 getRecommendDto()

样例 

public class SimpleJedisTemplate {

      public T  execute   (RedisCallback   action) {

                      boolean broken = false;

                   JedisCommands jedisCommands = null;

                     try {

                               jedisCommands = getJedisCommands();

                              return action.doInRedis(jedisCommands);

                              } catch (Exception e) {

                               broken = true;

                                  throw e;

                               } finally {

                              if (!isCluster) {

                                      closeResource((Jedis) jedisCommands, broken);

                                      }

                           }

}


public static abstract interface RedisCallback{

       T   doInRedis ( JedisCommands c ommands);

}


调用方法

public List  getRecommendDto(final String recommendType) {

                       try {

                         return simpleJedisTemplate.execute(

                               new RedisCallback >() {

                                                    public  List  doInRedis(

                                     JedisCommands commands) {

      String allRec = commands.hget(KeyUtil.RECOMMEND_KEY,                                                 recommendType);

          return JsonUtil.toObjArray(allRec, RecommendDto.class);

                                                     }

                                         });

                                           } catch (Exception e) {

                                  log.error("获取推荐位缓存异常!", e);}return null;

}

除了回调,还有java 泛型的精妙使用,多态复用,

设置泛型接口,在泛型接口设置泛型方法 ,通过泛型接口的泛型 确定 限制了接口方法的返回值,

另外一个是  一个泛型 的方法接受一个 泛型的参数,返回一个依赖 参数泛型的返回值 类型。

我们看到在回调的时候 ,临时重写接口方法的返回值适应 

你可能感兴趣的:(java函数回调)