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); } });}