code: @NonNull
    public Caffeine<K, V> weakValues() {
      requireState(valueStrength == null, "Value strength was already set to %s", valueStrength);
      valueStrength = Strength.WEAK;
      return this;
    }
docs: Specifies that each value (not key) stored in the cache should be wrapped in a
  {@link WeakReference} (by default, strong references are used).
  <p>
  Weak values will be garbage collected once they are weakly reachable. This makes them a poor
  candidate for caching; consider {@link #softValues} instead.
  <p>
  <b>Note:</b> when this method is used, the resulting cache will use identity ({@code ==})
  comparison to determine equality of values.
  <p>
  Entries with values that have been garbage collected may be counted in
  {@link Cache#estimatedSize()}, but will never be visible to read or write operations; such
  entries are cleaned up as part of the routine maintenance described in the class javadoc.
  <p>
  This feature cannot be used in conjunction with {@link #buildAsync}.
  
  @return this {@code Caffeine} instance (for chaining)
  @throws IllegalStateException if the value strength was already set