code: public static <K, V> Cache<K, V> register(@NonNull CacheSpec<K, V> specification) {
        return Cast.as(caches.computeIfAbsent(specification.getName(),
                                              name -> Cast.as(specification.getEngine().create(specification))
                                             )
                      );
     }
docs: Creates a cache for a given cache specification. If the name in the specification is a known cache, then
  it will return that cache.
  
  @param <K>           The key type
  @param <V>           The value type
  @param specification The specification
  @return A cache for the specification