要件
ライブラリの選定が面倒だったりで、あまりものを考えたくないけどオブジェクトをキャッシュしたいとき。
キャッシュサイズが小さく、JVMが起動している間はキャッシュクリアする必要ない場合。
ただ、並列処理には対応しなければいけない。
このくらいの要件であれば、ライブラリなど要らず簡単に実装できます。
実装方法
ConcurrentHashMap#computeIfAbsent
使う
例えば、特定のクラスからpublicなフィールドを取得したい場合、こんな感じ。
public class PublicFieldCache {
private static final Map<Class<?>, Field[]> cache = new ConcurrentHashMap<>();
public static Field[] getFields(Class<?> type) {
return cache.computeIfAbsent(type, Class::getFields);
}
}