Skip to content

Instantly share code, notes, and snippets.

@ts-3156
Created March 18, 2011 19:20
Show Gist options
  • Save ts-3156/876669 to your computer and use it in GitHub Desktop.
Save ts-3156/876669 to your computer and use it in GitHub Desktop.
/**
* かなり厳密に、キャッシュが存在するかどうか確かめる
* このコストを避けたい場合は、このメソッドを呼ばずに直接取得する
* @param <T>
* @param key
* @param type
* @return
*/
public static <T> boolean isCached(String key, T type){
Cache cache = getCache();
if(cache == null){
log.warning("cacheがnull。GAE側のエラー");
throw new SelfNullPointerException();
}
if(!cache.containsKey(key)){
log.warning(key + "をkeyに持つキャッシュは存在しない");
return false;
}
Object object = null;
try {
object = cache.get(key);
} catch (InvalidValueException e) {
// putされているクラスの実装が変更されていた場合、typeの型と関係なくここでエクセプションが起きる
log.warning("異なった実装がデプロイされている, " + e.getClass().getSimpleName() + ": " + e.getMessage());
return false;
}
if(object == null){
log.warning(key + "をkeyに持つキャッシュは存在したが、取得したデータがnullだった");
return false;
}
if(!object.getClass().getSimpleName().equals(type.getClass().getSimpleName())){
log.warning(key + "をkeyに持つキャッシュは存在したが、getSimpleName()が一致しない");
return false;
}
return true;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment