code: @NonNull
    public <K1 extends K, V1 extends V> Cache<K1, V1> build() {
      requireWeightWithWeigher();
      requireNonLoadingCache();
  
      @SuppressWarnings("unchecked")
      Caffeine<K1, V1> self = (Caffeine<K1, V1>) this;
      return isBounded()
          ? new BoundedLocalCache.BoundedLocalManualCache<>(self)
          : new UnboundedLocalCache.UnboundedLocalManualCache<>(self);
    }
docs: Builds a cache which does not automatically load values when keys are requested unless a
  mapping function is provided. Note that multiple threads can concurrently load values for
  distinct keys.
  <p>
  Consider {@link #build(CacheLoader)} instead, if it is feasible to implement a
  {@code CacheLoader}.
  <p>
  This method does not alter the state of this {@code Caffeine} instance, so it can be invoked
  again to create multiple independent caches.
  
  @param <K1> the key type of the cache
  @param <V1> the value type of the cache
  @return a cache having the requested features