Class Cache4<K1,K2,K3,K4,V>

java.lang.Object
org.apache.juneau.commons.collections.Cache4<K1,K2,K3,K4,V>
Type Parameters:
K1 - The first key type.
K2 - The second key type.
K3 - The third key type.
K4 - The fourth key type.
V - The value type.

public class Cache4<K1,K2,K3,K4,V> extends Object
Simple in-memory cache for storing and retrieving objects by four-part keys.
Overview:

This class uses ConcurrentHashMap internally to provide a thread-safe caching layer with automatic value computation, cache eviction, and statistics tracking for four-part composite keys. It's designed for caching expensive-to-compute or frequently-accessed objects indexed by four keys.

Features:
  • Thread-safe concurrent access without external synchronization
  • Four-part composite key support
  • Automatic cache eviction when maximum size is reached
  • Lazy computation via Function4 supplier pattern
  • Default supplier support for simplified access
  • Built-in hit/miss statistics tracking
  • Optional logging of cache statistics on JVM shutdown
  • Can be disabled entirely via builder or system property
See Also:
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static class 
    Builder for creating configured Cache4 instances.
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    Constructor.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    Removes all entries from the cache.
    boolean
    containsKey(K1 key1, K2 key2, K3 key3, K4 key4)
    Returns true if the cache contains a mapping for the specified four-part key.
    boolean
    Returns true if the cache contains one or more entries with the specified value.
    static <K1, K2, K3, K4, V>
    Cache4.Builder<K1,K2,K3,K4,V>
    Creates a new Cache4.Builder for constructing a cache with explicit type parameters.
    get(K1 key1, K2 key2, K3 key3, K4 key4)
    Retrieves a cached value by four-part key using the default supplier.
    get(K1 key1, K2 key2, K3 key3, K4 key4, Supplier<V> supplier)
    Retrieves a cached value by four-part key, computing it if necessary using the provided supplier.
    int
    Returns the total number of cache hits since this cache was created.
    boolean
    Returns true if the cache contains no entries.
    static <K1, K2, K3, K4, V>
    Cache4.Builder<K1,K2,K3,K4,V>
    of(Class<K1> key1, Class<K2> key2, Class<K3> key3, Class<K4> key4, Class<V> type)
    Creates a new Cache4.Builder for constructing a cache.
    put(K1 key1, K2 key2, K3 key3, K4 key4, V value)
    Associates the specified value with the specified four-part key.
    remove(K1 key1, K2 key2, K3 key3, K4 key4)
    Removes the entry for the specified four-part key from the cache.
    int
    Returns the number of entries in the cache.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • Cache4

      protected Cache4(Cache4.Builder<K1,K2,K3,K4,V> builder)
      Constructor.
      Parameters:
      builder - The builder containing configuration settings.
  • Method Details

    • create

      public static <K1, K2, K3, K4, V> Cache4.Builder<K1,K2,K3,K4,V> create()
      Creates a new Cache4.Builder for constructing a cache with explicit type parameters.

      This variant allows you to specify the cache's generic types explicitly without passing the class objects, which is useful when working with complex parameterized types.

      Type Parameters:
      K1 - The first key type.
      K2 - The second key type.
      K3 - The third key type.
      K4 - The fourth key type.
      V - The value type.
      Returns:
      A new builder for configuring the cache.
    • of

      public static <K1, K2, K3, K4, V> Cache4.Builder<K1,K2,K3,K4,V> of(Class<K1> key1, Class<K2> key2, Class<K3> key3, Class<K4> key4, Class<V> type)
      Creates a new Cache4.Builder for constructing a cache.
      Type Parameters:
      K1 - The first key type.
      K2 - The second key type.
      K3 - The third key type.
      K4 - The fourth key type.
      V - The value type.
      Parameters:
      key1 - The first key type class (used for type safety).
      key2 - The second key type class (used for type safety).
      key3 - The third key type class (used for type safety).
      key4 - The fourth key type class (used for type safety).
      type - The value type class.
      Returns:
      A new builder for configuring the cache.
    • clear

      public void clear()
      Removes all entries from the cache.
    • containsKey

      public boolean containsKey(K1 key1, K2 key2, K3 key3, K4 key4)
      Returns true if the cache contains a mapping for the specified four-part key.
      Parameters:
      key1 - The first key.
      key2 - The second key.
      key3 - The third key.
      key4 - The fourth key.
      Returns:
      true if the cache contains the four-part key.
    • containsValue

      public boolean containsValue(V value)
      Returns true if the cache contains one or more entries with the specified value.
      Parameters:
      value - The value to check.
      Returns:
      true if the cache contains the value.
    • get

      public V get(K1 key1, K2 key2, K3 key3, K4 key4)
      Retrieves a cached value by four-part key using the default supplier.
      Parameters:
      key1 - First key component. Can be null.
      key2 - Second key component. Can be null.
      key3 - Third key component. Can be null.
      key4 - Fourth key component. Can be null.
      Returns:
      The cached or computed value. May be null if the supplier returns null.
      Throws:
      NullPointerException - if no default supplier was configured.
    • get

      public V get(K1 key1, K2 key2, K3 key3, K4 key4, Supplier<V> supplier)
      Retrieves a cached value by four-part key, computing it if necessary using the provided supplier.
      Parameters:
      key1 - First key component. Can be null.
      key2 - Second key component. Can be null.
      key3 - Third key component. Can be null.
      key4 - Fourth key component. Can be null.
      supplier - The supplier to compute the value if it's not in the cache. Must not be null.
      Returns:
      The cached or computed value. May be null if the supplier returns null.
    • getCacheHits

      public int getCacheHits()
      Returns the total number of cache hits since this cache was created.
      Returns:
      The total number of cache hits since creation.
    • isEmpty

      public boolean isEmpty()
      Returns true if the cache contains no entries.
      Returns:
      true if the cache is empty.
    • put

      public V put(K1 key1, K2 key2, K3 key3, K4 key4, V value)
      Associates the specified value with the specified four-part key.
      Parameters:
      key1 - The first key.
      key2 - The second key.
      key3 - The third key.
      key4 - The fourth key.
      value - The value to associate with the four-part key.
      Returns:
      The previous value associated with the four-part key, or null if there was no mapping.
    • remove

      public V remove(K1 key1, K2 key2, K3 key3, K4 key4)
      Removes the entry for the specified four-part key from the cache.
      Parameters:
      key1 - The first key.
      key2 - The second key.
      key3 - The third key.
      key4 - The fourth key.
      Returns:
      The previous value associated with the four-part key, or null if there was no mapping.
    • size

      public int size()
      Returns the number of entries in the cache.
      Returns:
      The number of cached entries.