@NonNull
  public Caffeine<K, V> softValues() {
    requireState(valueStrength == null, "Value strength was already set to %s", valueStrength);
    valueStrength = Strength.SOFT;
    return this;
  }
@ NonNull public Caffeine < K , V > softValues ( ) { requireState ( valueStrength == null , "Value strength was already set to %s" , valueStrength ) ; valueStrength = Strength . SOFT ; return this ; }
Specifies that each value (not key) stored in the cache should be wrapped in a
{@link SoftReference} (by default, strong references are used). Softly-referenced objects will
be garbage-collected in a <i>globally</i> least-recently-used manner, in response to memory
demand.
<p>
<b>Warning:</b> in most circumstances it is better to set a per-cache
{@linkplain #maximumSize(long) maximum size} instead of using soft references. You should only
use this method if you are very familiar with the practical consequences of soft references.
<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