package com.vincent.rsf.framework.common; import com.vincent.rsf.framework.exception.ApplicationException; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Supplier; /** * 缓存 * */ public class Cache { private Map caches=new ConcurrentHashMap<>(); @SuppressWarnings("unchecked") public T get(Class prototype) { return (T) get(prototype.getName()); } public Object get(String key) { return get(key,true); } @SuppressWarnings("unchecked") public T get(String key,Supplier func){ if(!hasKey(key)) { put(key,func.get()); } return (T)get(key); } public Object get(String key,boolean exist) { if(exist) { if(!hasKey(key)) { throw new ApplicationException(this+"-找不到缓存对象:"+key); } } return caches.get(key); } public Cache put(Object value) { String key=value.getClass().getName(); put(key,value); return this; } public Cache put(String key,Object value) { put(key, value,true); return this; } public Cache put(String key,Object value,boolean exist) { if(exist) { if(hasKey(key)) { throw new ApplicationException(this+"-缓存"+key+"已存在"); } } caches.put(key, value); return this; } public boolean hasKey(Class prototype) { return hasKey(prototype.getName()); } public boolean hasKey(String key) { return caches.containsKey(key); } }