Class Memoizer<K,V>

java.lang.Object
org.faktorips.runtime.caching.Memoizer<K,V>
All Implemented Interfaces:
IComputable<K,V>

public class Memoizer<K,V> extends Object implements IComputable<K,V>
This Memoizer is implemented as suggested by Brian Goetz in Java Concurrency in Practice. It is a thread safe caching mechanism that loads not stored object by calling a IComputable. It is extended by the soft reference mechanism so references could be garbage collected in case of memory needs.
Author:
dirmeier
  • Constructor Details

  • Method Details

    • of

      public static <K, V> Memoizer<K,V> of(Class<? super V> valueClass, Function<K,V> function)
      Creates a new Memoizer for the given value class using the given Function to compute the values from keys.
      Type Parameters:
      K - the key type
      V - the value type
      Parameters:
      valueClass - the class of the values
      function - the function to compute a value from a key
      Returns:
      a new IComputable
    • compute

      public V compute(K key) throws InterruptedException
      Description copied from interface: IComputable
      Compute an object of type V identified by the key of type K
      Specified by:
      compute in interface IComputable<K,V>
      Parameters:
      key - the key to identify the object
      Returns:
      the computed Object of type V
      Throws:
      InterruptedException - When computation was interrupted
    • launderThrowable

      public static RuntimeException launderThrowable(Throwable t)
      Coerce an unchecked Throwable to a RuntimeException

      If the Throwable is an Error, throw it; if it is a RuntimeException return it, otherwise throw IllegalStateException

    • getValueClass

      public Class<? super V> getValueClass()
      Description copied from interface: IComputable
      Getting the Class of the value this computable produces.
      Specified by:
      getValueClass in interface IComputable<K,V>