简述

Java里的方法参数可以使用接口,实际在使用时可以将实现了接口的类传递给方法,也可以new一个接口进行传递,在接口的实现类里进行相关的业务实现, 
这在实际开发里很多场景会遇到。再看看下面的例子,希望对各位同学有帮助!

示例代码

接口

  1. 有返回值的模版Action接口

public interface JedisAction<T> {
       T action(Jedis jedis);
}
  1. 没有返回值的模版Action接口

public interface JedisActionNoResult {
       void action(Jedis jedis);
}

方法

  1. 有返回结果的执行方法

public <T> T execute(JedisAction<T> jedisAction) throws JedisException {
       Jedis jedis = null;
       boolean broken = false;
       try {
           jedis = jedisPool.getResource();//从jedis连接池里获取连接
           return jedisAction.action(jedis);
       } catch (JedisException e) {
           broken = handleJedisException(e);//出现异常,连接归还连接池
           throw e;
       } finally {
           closeResource(jedis, broken);//释放资源
       }
   }
  1. 没有返回结果的执行方法

public void execute(JedisActionNoResult jedisAction) throws JedisException {
       Jedis jedis = null;
       boolean broken = false;
       try {
           jedis = jedisPool.getResource();//从jedis连接池里获取连接资源
           jedisAction.action(jedis);
       } catch (JedisException e) {
           broken = handleJedisException(e);//出现异常,连接归还连接池
           throw e;
       } finally {
           closeResource(jedis, broken);//释放资源
       }
   }

执行

  1. 无需返回值的方法执行,用基于jedis的set举例

/**
* 将字符串值 value 关联到 key
*  如果 key 已经持有其他值, SET 就覆写旧值,无视类型
* ps:value虽然可以放入最多不超过1GB的字符串。但还是存入的越短越好
*/

public void set(final String key, final String value) {
   execute(new JedisActionNoResult() {//这里new了一个不需要结果的接口类
       @Override
       public void action(Jedis jedis) {
           jedis.set(key, value);
       }
   });
}
  1. 有返回值的方法执行,用基于jedis的get举例

/**
* 根据key获得string类型的value
* /
public String get(final String key) {
   return execute(new JedisAction<String>() {//这里new了一个需要结果的接口类
       @Override
       public String action(Jedis jedis) {
           return jedis.get(key);
       }
   });
}