public @NotNull V getCachedValue(T key) {
    SofterReference<ConcurrentMap<T, V>> ref = myCache;
    ConcurrentMap<T, V> map = ref == null ? null : ref.get();
    if (map == null) {
      map = new ConcurrentHashMap<>();
      myCache = new SofterReference<>(map);
    }
    return map.computeIfAbsent(key, myValueProvider);
  }
public @NotNull V getCachedValue(T key)