
shz.cache.Cache Maven / Gradle / Ivy
package shz.cache;
import shz.PropHelp;
import shz.Validator;
import java.lang.annotation.Annotation;
import java.lang.reflect.Parameter;
import java.text.Collator;
import java.util.*;
import java.util.function.Function;
public interface Cache {
default V get(K key) {
return null;
}
default void put(K key, V val) {
}
default boolean containsKey(K key) {
return false;
}
default int size() {
return 0;
}
default void delete(K key) {
}
void clear();
/**
* 根据参数注解生成key
*/
static String generateKey(String key, Object[] args, Parameter[] parameters, Class aCls, Function keys) {
if (Validator.isEmpty(args)) return key;
int len = args.length;
if (len != parameters.length) throw new IllegalArgumentException();
StringBuilder sb = new StringBuilder();
boolean flag = Validator.nonBlank(key);
if (flag) sb.append(key);
for (int i = 0; i < len; ++i) {
A a = parameters[i].getAnnotation(aCls);
if (a == null) continue;
if (flag) sb.append(":");
else flag = true;
sb.append(generateKey(null, args[i], keys.apply(a)));
}
return sb.toString();
}
/**
* 生成key
*
* @param key 主key
* @param arg 请求参数
* @param keys 请求key集合
*/
static String generateKey(String key, Object arg, String... keys) {
StringBuilder sb = new StringBuilder();
boolean flag = Validator.nonBlank(key);
if (flag) sb.append(key);
Map map = PropHelp.fieldValueMap(arg);
if (map.isEmpty()) {
if (Validator.nonEmpty(keys)) {
if (flag) sb.append(":");
sb.append(String.join(":", keys));
} else if (arg != null) {
if (flag) sb.append(":");
sb.append(arg.toString());
}
} else {
List list = Validator.isEmpty(keys) ? new ArrayList<>(map.keySet()) : Arrays.asList(keys);
list.sort(Collator.getInstance(Locale.CHINA));
key = list.get(0);
if (flag) sb.append(":");
sb.append(key).append("-").append(map.get(key));
int size = list.size();
for (int i = 1; i < size; ++i) {
key = list.get(i);
sb.append(":").append(key).append("-").append(map.get(key));
}
}
return sb.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy