com.opensymphony.xwork2.inject.util

## Class ReferenceCache<K,V>

- java.lang.Object
- - com.opensymphony.xwork2.inject.util.ReferenceMap<K,V>
  - - com.opensymphony.xwork2.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 com.opensymphony.xwork2.inject.util.ReferenceMap

      `ReferenceMap.Strategy`

  - ### Constructor Summary

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

  - ### Method Summary

    Methods
    Modifier and Type | Method and 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 com.opensymphony.xwork2.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

      `equals, hashCode`

- - ### Constructor Detail

    - #### ReferenceCache

          public ReferenceCache(ReferenceType keyReferenceType,
                        ReferenceType valueReferenceType)

    - #### ReferenceCache

          public ReferenceCache()

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

  - ### Method Detail

    - #### 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

Copyright © 2000–2022 Apache Software Foundation. All rights reserved.