Java里的方法参数能够使用接口,实际在使用时能够将实现了接口的类传递给方法,也能够new一个接口进行传递,在接口的实现类里进行相关的业务实现,
这在实际开发里不少场景会遇到。再看看下面的例子,但愿对各位同窗有帮助!app
接口ide
有返回值的模版Action接口spa
public interface JedisAction<T> {
T action(Jedis jedis);
}
没有返回值的模版Action接口code
public interface JedisActionNoResult {
void action(Jedis jedis);
}
方法orm
有返回结果的执行方法接口
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);//释放资源
}
}
没有返回结果的执行方法ci
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);//释放资源
}
}
执行资源
无需返回值的方法执行,用基于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);
}
});
}
有返回值的方法执行,用基于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); } });}