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:
  • 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