Class AbstractReferenceMap.ReferenceEntry<K,V>

java.lang.Object
org.apache.openjpa.lib.util.collections.AbstractHashedMap.HashEntry<K,V>
org.apache.openjpa.lib.util.collections.AbstractReferenceMap.ReferenceEntry<K,V>
All Implemented Interfaces:
Map.Entry<K,V>, KeyValue<K,V>
Enclosing class:
AbstractReferenceMap<K,V>

protected static class AbstractReferenceMap.ReferenceEntry<K,V> extends AbstractHashedMap.HashEntry<K,V>
A MapEntry implementation for the map.

If getKey() or getValue() returns null, it means the mapping is stale and should be removed.

Since:
3.1
  • Constructor Details

    • ReferenceEntry

      public ReferenceEntry(AbstractReferenceMap<K,V> parent, AbstractHashedMap.HashEntry<K,V> next, int hashCode, K key, V value)
      Creates a new entry object for the ReferenceMap.
      Parameters:
      parent - the parent map
      next - the next entry in the hash bucket
      hashCode - the hash code of the key
      key - the key
      value - the value
  • Method Details

    • getKey

      public K getKey()
      Gets the key from the entry. This method dereferences weak and soft keys and thus may return null.
      Specified by:
      getKey in interface KeyValue<K,V>
      Specified by:
      getKey in interface Map.Entry<K,V>
      Overrides:
      getKey in class AbstractHashedMap.HashEntry<K,V>
      Returns:
      the key, which may be null if it was garbage collected
    • getValue

      public V getValue()
      Gets the value from the entry. This method dereferences weak and soft value and thus may return null.
      Specified by:
      getValue in interface KeyValue<K,V>
      Specified by:
      getValue in interface Map.Entry<K,V>
      Overrides:
      getValue in class AbstractHashedMap.HashEntry<K,V>
      Returns:
      the value, which may be null if it was garbage collected
    • setValue

      public V setValue(V obj)
      Sets the value of the entry.
      Specified by:
      setValue in interface Map.Entry<K,V>
      Overrides:
      setValue in class AbstractHashedMap.HashEntry<K,V>
      Parameters:
      obj - the object to store
      Returns:
      the previous value
    • equals

      public boolean equals(Object obj)
      Compares this map entry to another.

      This implementation uses isEqualKey and isEqualValue on the main map for comparison.

      Specified by:
      equals in interface Map.Entry<K,V>
      Overrides:
      equals in class AbstractHashedMap.HashEntry<K,V>
      Parameters:
      obj - the other map entry to compare to
      Returns:
      true if equal, false if not
    • hashCode

      public int hashCode()
      Gets the hashcode of the entry using temporary hard references.

      This implementation uses hashEntry on the main map.

      Specified by:
      hashCode in interface Map.Entry<K,V>
      Overrides:
      hashCode in class AbstractHashedMap.HashEntry<K,V>
      Returns:
      the hashcode of the entry
    • toReference

      protected <T> Object toReference(AbstractReferenceMap.ReferenceStrength type, T referent, int hash)
      Constructs a reference of the given type to the given referent. The reference is registered with the queue for later purging.
      Type Parameters:
      T - the type of the referenced object
      Parameters:
      type - HARD, SOFT or WEAK
      referent - the object to refer to
      hash - the hash code of the key of the mapping; this number might be different from referent.hashCode() if the referent represents a value and not a key
      Returns:
      the reference to the object
    • onPurge

      protected void onPurge()
      This is the callback for custom "after purge" logic
    • purge

      protected boolean purge(Reference<?> ref)
      Purges the specified reference
      Parameters:
      ref - the reference to purge
      Returns:
      true or false
    • next

      Gets the next entry in the bucket.
      Returns:
      the next entry in the bucket
    • nullValue

      protected void nullValue()
      This method can be overriden to provide custom logic to purge value