Package org.apache.struts2.inject.util

# Class ReferenceCache<K,V>

java.lang.Object
org.apache.struts2.inject.util.ReferenceMap<K,V>
org.apache.struts2.inject.util.ReferenceCache<K,V>

All Implemented Interfaces:
  `Serializable`, `Map<K,V>`

public abstract class ReferenceCache<K,V> extends ReferenceMap<K,V>
Extends `ReferenceMap` to support lazy loading values by overriding `create(Object)`.

Author:
  crazybob@google.com (Bob Lee)
See Also:
  - Serialized Form

- ## Nested Class Summary

  ## Nested classes/interfaces inherited from class org.apache.struts2.inject.util.ReferenceMap

  `ReferenceMap.Strategy`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ReferenceCache()`
  Equivalent to `new ReferenceCache(STRONG, STRONG)`.
  `ReferenceCache(ReferenceType keyReferenceType, ReferenceType valueReferenceType)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected void`
  `cancel()`
  Cancels the current `create(Object)`.
  `protected abstract V`
  `create(K key)`
  Override to lazy load values.
  `V`
  `get(Object key)`
  `static <K, V> ReferenceCache<K,V>`
  `of(ReferenceType keyReferenceType, ReferenceType valueReferenceType, Function<? super K,? extends V> function)`
  Returns a `ReferenceCache` delegating to the specified `function`.

  ### Methods inherited from class org.apache.struts2.inject.util.ReferenceMap

  `clear, containsKey, containsValue, entrySet, getPutStrategy, isEmpty, keySet, put, putAll, putIfAbsent, putIfAbsentStrategy, putStrategy, remove, remove, replace, replace, replaceStrategy, size, values`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

  ### Methods inherited from interface java.util.Map

  `compute, computeIfAbsent, computeIfPresent, equals, forEach, getOrDefault, hashCode, merge, replaceAll`

- ## Constructor Details

  - ### ReferenceCache

    public ReferenceCache(ReferenceType keyReferenceType, ReferenceType valueReferenceType)

  - ### ReferenceCache

    public ReferenceCache()
    Equivalent to `new ReferenceCache(STRONG, STRONG)`.

- ## Method Details

  - ### create

    protected abstract V create(K key)
    Override to lazy load values. Use as an alternative to `ReferenceMap.put(Object, Object)`. Invoked by getter if value isn't already cached. Must not return `null`. This method will not be called again until the garbage collector reclaims the returned value.
    Parameters:
      `key` - the key
    Returns:
      returned value

  - ### get

    public V get(Object key)

    If this map does not contain an entry for the given key and `create(Object)` has been overridden, this method will create a new value, put it in the map, and return it.

    Specified by:
      `get` in interface `Map<K,V>`
    Overrides:
      `get` in class `ReferenceMap<K,V>`
    Parameters:
      `key` - the key
    Returns:
      return new created value
    Throws:
      `NullPointerException` - if `create(Object)` returns null.
      `CancellationException` - if the creation is cancelled. See `cancel()`.

  - ### cancel

    protected void cancel()
    Cancels the current `create(Object)`. Throws `CancellationException` to all clients currently blocked on `get(Object)`.

  - ### of

    public static <K, V> ReferenceCache<K,V> of(ReferenceType keyReferenceType, ReferenceType valueReferenceType, Function<? super K,? extends V> function)
    Returns a `ReferenceCache` delegating to the specified `function`. The specified function must not return `null`.
    Type Parameters:
      `K` - type of key
      `V` - type of value
    Parameters:
      `function` - function
      `keyReferenceType` - key reference type
      `valueReferenceType` - value reference type
    Returns:
      reference cache