Top Description Inners Fields Constructors Methods
org.easymock.bytebuddy

public Class TypeCache<T>

extends ReferenceQueue<ClassLoader>
Class Inheritance
Known Direct Subclasses
org.easymock.bytebuddy.TypeCache.WithInlineExpunction
Type Parameters
<T>
The type of the key that is used for identifying stored classes per class loader. Such keys must not strongly reference any types or class loaders without potentially corrupting the garbage eligibility of stored classes. As the storage is segmented by class loader, it is normally sufficient to store types by their name.
Imports
edu.umd.cs.findbugs.annotations.SuppressFBWarnings, org.easymock.bytebuddy.build.CachedReturnPlugin, org.easymock.bytebuddy.utility.CompoundList, org.easymock.bytebuddy.utility.nullability.AlwaysNull, .MaybeNull, java.lang.ref.Reference, .ReferenceQueue, .SoftReference, .WeakReference, java.util.*, java.util.concurrent.Callable, .ConcurrentHashMap, .ConcurrentMap

A cache for storing types without strongly referencing any class loader or type.

Note

In order to clean obsolete class loader references from the map, TypeCache#expungeStaleEntries() must be called regularly. This can happen in a different thread, in custom intervals or on every use of the cache by creating an instance of WithInlineExpunction. This cache is fully thread-safe.

Important Note

The behavior of a type cache might not be as expected. A class is only eligible for garbage collection once its class loader is eligible for garbage collection. At the same time, a garbage collector is only eligible for garbage collection once all of its classes are eligible for garbage collection. If this cache referenced the cached type strongly, this would never be the case which is why this cache maintains either strong or weak references. In the latter case, a type is typically retained until the last instance of the type is not eligible for garbage collection. With soft references, the type is typically retained until the next full garbage collection where all instances of the type are eligible for garbage collection.

See Also
WithInlineExpunction, SimpleKey

Nested and Inner Type Summary

Modifier and TypeClass and Description
protected static class
TypeCache.LookupKey

A key used for looking up a previously inserted class loader cache.

public static class
TypeCache.SimpleKey

A simple key based on a collection of types where no type is strongly referenced.

public static enum
TypeCache.Sort

Determines the storage format for a cached type.

protected static class
TypeCache.StorageKey

A key used for storing a class loader cache reference.

public static class
TypeCache.WithInlineExpunction<
The type of the key that is used for identifying stored classes per class loader. Such keys must not strongly reference any types or class loaders without potentially corrupting the garbage eligibility of stored classes. As the storage is segmented by class loader, it is normally sufficient to store types by their name.
S
>

An implementation of a TypeCache where obsolete references are cleared upon any call.

Field Summary

Modifier and TypeField and Description
protected final ConcurrentMap<TypeCache.StorageKey, ConcurrentMap<T, Object>>
cache

The underlying map containing cached objects.

private static final Class<?>
NOT_FOUND

Indicates that a type was not found.

protected final TypeCache.Sort
sort

The reference type to use for stored types.

Constructor Summary

AccessConstructor and Description
public
TypeCache()

Creates a new type cache with strong references to the stored types.

public
TypeCache(TypeCache.Sort
The reference type to use for stored types.
sort
)

Creates a new type cache.

Method Summary

Modifier and TypeMethod and Description
public void
clear()

Clears the entire cache.

public void
expungeStaleEntries()

Removes any stale class loader entries from the cache.

public Class<?>

Returns:

The stored type or null if no type was stored.
find
(ClassLoader
The class loader for which this type is stored.
classLoader
,
T
The key for the type in question.
key
)

Finds a stored type or returns null if no type was stored.

public Class<?>

Returns:

The lazily created type or a previously submitted type for the same class loader and key combination.
findOrInsert
(ClassLoader
The class loader for which this type is stored.
classLoader
,
T
The key for the type in question.
key
,
Callable<Class<?>>
A lazy creator for the type to insert of no previous type was stored in the cache.
lazy
)

Finds an existing type or inserts a new one if the previous type was not found.

public Class<?>

Returns:

The lazily created type or a previously submitted type for the same class loader and key combination.
findOrInsert
(ClassLoader
The class loader for which this type is stored.
classLoader
,
T
The key for the type in question.
key
,
Callable<Class<?>>
A lazy creator for the type to insert of no previous type was stored in the cache.
lazy
,
Object
A monitor to lock before creating the lazy type.
monitor
)

Finds an existing type or inserts a new one if the previous type was not found.

public Class<?>

Returns:

The supplied type or a previously submitted type for the same class loader and key combination.
insert
(ClassLoader
The class loader for which this type is stored.
classLoader
,
T
The key for the type in question.
key
,
Class<?>
The type to insert of no previous type was stored in the cache.
type
)

Inserts a new type into the cache.

Inherited from java.lang.ref.ReferenceQueue:
pollremoveremove

Field Detail

cacheback to summary
protected final ConcurrentMap<TypeCache.StorageKey, ConcurrentMap<T, Object>> cache

The underlying map containing cached objects.

NOT_FOUNDback to summary
private static final Class<?> NOT_FOUND

Indicates that a type was not found.

Annotations
@AlwaysNull
sortback to summary
protected final TypeCache.Sort sort

The reference type to use for stored types.

Constructor Detail

TypeCacheback to summary
public TypeCache()

Creates a new type cache with strong references to the stored types.

TypeCacheback to summary
public TypeCache(TypeCache.Sort sort)

Creates a new type cache.

Parameters
sort:TypeCache.Sort

The reference type to use for stored types.

Method Detail

clearback to summary
public void clear()

Clears the entire cache.

expungeStaleEntriesback to summary
public void expungeStaleEntries()

Removes any stale class loader entries from the cache.

findback to summary
public Class<?> find(ClassLoader classLoader, T key)

Finds a stored type or returns null if no type was stored.

Parameters
classLoader:ClassLoader

The class loader for which this type is stored.

key:T

The key for the type in question.

Returns:Class<?>

The stored type or null if no type was stored.

Annotations
@MaybeNull
@SuppressFBWarnings:GC_UNRELATED_TYPES
justification:Cross-comparison is intended.
findOrInsertback to summary
public Class<?> findOrInsert(ClassLoader classLoader, T key, Callable<Class<?>> lazy)

Finds an existing type or inserts a new one if the previous type was not found.

Parameters
classLoader:ClassLoader

The class loader for which this type is stored.

key:T

The key for the type in question.

lazy:Callable<Class<?>>

A lazy creator for the type to insert of no previous type was stored in the cache.

Returns:Class<?>

The lazily created type or a previously submitted type for the same class loader and key combination.

findOrInsertback to summary
public Class<?> findOrInsert(ClassLoader classLoader, T key, Callable<Class<?>> lazy, Object monitor)

Finds an existing type or inserts a new one if the previous type was not found.

Parameters
classLoader:ClassLoader

The class loader for which this type is stored.

key:T

The key for the type in question.

lazy:Callable<Class<?>>

A lazy creator for the type to insert of no previous type was stored in the cache.

monitor:Object

A monitor to lock before creating the lazy type.

Returns:Class<?>

The lazily created type or a previously submitted type for the same class loader and key combination.

insertback to summary
public Class<?> insert(ClassLoader classLoader, T key, Class<?> type)

Inserts a new type into the cache. If a type with the same class loader and key was inserted previously, the cache is not updated.

Parameters
classLoader:ClassLoader

The class loader for which this type is stored.

key:T

The key for the type in question.

type:Class<?>

The type to insert of no previous type was stored in the cache.

Returns:Class<?>

The supplied type or a previously submitted type for the same class loader and key combination.

Annotations
@SuppressFBWarnings:GC_UNRELATED_TYPES
justification:Cross-comparison is intended.
org.easymock.bytebuddy back to summary

protected Class TypeCache.LookupKey

extends Object
Class Inheritance

A key used for looking up a previously inserted class loader cache.

Field Summary

Modifier and TypeField and Description
private final ClassLoader
classLoader

The referenced class loader.

private final int
hashCode

The class loader's identity hash code.

Constructor Summary

AccessConstructor and Description
protected
LookupKey(ClassLoader
The represented class loader.
classLoader
)

Creates a new lookup key.

Method Summary

Modifier and TypeMethod and Description
public boolean
equals(Object
the reference object with which to compare.
other
)

Overrides java.lang.Object.equals.

Indicates whether some other object is "equal to" this one.
public int
hashCode()

Overrides java.lang.Object.hashCode.

Returns a hash code value for this object.
Inherited from java.lang.Object:
clonefinalizegetClassnotifynotifyAlltoStringwaitwaitwait

Field Detail

classLoaderback to summary
private final ClassLoader classLoader

The referenced class loader.

Annotations
@MaybeNull
hashCodeback to summary
private final int hashCode

The class loader's identity hash code.

Constructor Detail

LookupKeyback to summary
protected LookupKey(ClassLoader classLoader)

Creates a new lookup key.

Parameters
classLoader:ClassLoader

The represented class loader.

Method Detail

equalsback to summary
public boolean equals(Object other)

Overrides java.lang.Object.equals.

Doc from java.lang.Object.equals.

Indicates whether some other object is "equal to" this one.

The equals method implements an equivalence relation on non-null object references:

  • It is reflexive: for any non-null reference value x, x.equals(x) should return true.
  • It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.
  • It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.
  • It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified.
  • For any non-null reference value x, x.equals(null) should return false.

An equivalence relation partitions the elements it operates on into equivalence classes; all the members of an equivalence class are equal to each other. Members of an equivalence class are substitutable for each other, at least for some purposes.

Parameters
other:Object

the reference object with which to compare.

Returns:boolean

true if this object is the same as the obj argument; false otherwise.

Annotations
@Override
@SuppressFBWarnings:EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS
justification:Cross-comparison is intended.
hashCodeback to summary
public int hashCode()

Overrides java.lang.Object.hashCode.

Doc from java.lang.Object.hashCode.

Returns a hash code value for this object. This method is supported for the benefit of hash tables such as those provided by java.util.HashMap.

The general contract of hashCode is:

  • Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.
  • If two objects are equal according to the equals method, then calling the hashCode method on each of the two objects must produce the same integer result.
  • It is not required that if two objects are unequal according to the equals method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables.
Returns:int

a hash code value for this object

Annotations
@Override
org.easymock.bytebuddy back to summary

public Class TypeCache.SimpleKey

extends Object
Class Inheritance

A simple key based on a collection of types where no type is strongly referenced.

Field Summary

Modifier and TypeField and Description
private final Set<String>
types

The referenced types.

Constructor Summary

AccessConstructor and Description
public
SimpleKey(Class<?>
The first type to be represented by this key.
type
,
Class<?>...
Any additional types to be represented by this key.
additionalType
)

Creates a simple cache key..

public
SimpleKey(Class<?>
The first type to be represented by this key.
type
,
Collection<? extends Class<?>>
Any additional types to be represented by this key.
additionalTypes
)

Creates a simple cache key..

public
SimpleKey(Collection<? extends Class<?>>
Any types to be represented by this key.
types
)

Creates a simple cache key..

Method Summary

Modifier and TypeMethod and Description
public boolean
equals(Object
the reference object with which to compare.
other
)

Overrides java.lang.Object.equals.

Indicates whether some other object is "equal to" this one.
public int
hashCode()

Overrides java.lang.Object.hashCode.

Returns a hash code value for this object.
Inherited from java.lang.Object:
clonefinalizegetClassnotifynotifyAlltoStringwaitwaitwait

Field Detail

typesback to summary
private final Set<String> types

The referenced types.

Constructor Detail

SimpleKeyback to summary
public SimpleKey(Class<?> type, Class<?>... additionalType)

Creates a simple cache key..

Parameters
type:Class<?>

The first type to be represented by this key.

additionalType:Class<?>[]

Any additional types to be represented by this key.

SimpleKeyback to summary
public SimpleKey(Class<?> type, Collection<? extends Class<?>> additionalTypes)

Creates a simple cache key..

Parameters
type:Class<?>

The first type to be represented by this key.

additionalTypes:Collection<? extends Class<?>>

Any additional types to be represented by this key.

SimpleKeyback to summary
public SimpleKey(Collection<? extends Class<?>> types)

Creates a simple cache key..

Parameters
types:Collection<? extends Class<?>>

Any types to be represented by this key.

Method Detail

equalsback to summary
public boolean equals(Object other)

Overrides java.lang.Object.equals.

Doc from java.lang.Object.equals.

Indicates whether some other object is "equal to" this one.

The equals method implements an equivalence relation on non-null object references:

  • It is reflexive: for any non-null reference value x, x.equals(x) should return true.
  • It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.
  • It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.
  • It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified.
  • For any non-null reference value x, x.equals(null) should return false.

An equivalence relation partitions the elements it operates on into equivalence classes; all the members of an equivalence class are equal to each other. Members of an equivalence class are substitutable for each other, at least for some purposes.

Parameters
other:Object

the reference object with which to compare.

Returns:boolean

true if this object is the same as the obj argument; false otherwise.

Annotations
@Override
hashCodeback to summary
public int hashCode()

Overrides java.lang.Object.hashCode.

Doc from java.lang.Object.hashCode.

Returns a hash code value for this object. This method is supported for the benefit of hash tables such as those provided by java.util.HashMap.

The general contract of hashCode is:

  • Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.
  • If two objects are equal according to the equals method, then calling the hashCode method on each of the two objects must produce the same integer result.
  • It is not required that if two objects are unequal according to the equals method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables.
Returns:int

a hash code value for this object

Annotations
@Override
@Enhance:hashCode
org.easymock.bytebuddy back to summary

public sealed Enum TypeCache.Sort

extends Enum<TypeCache.Sort>
Class Inheritance

Determines the storage format for a cached type.

Field Summary

Modifier and TypeField and Description
public static final TypeCache.Sort
SOFT

Creates a cache where cached types are wrapped by SoftReferences.

public static final TypeCache.Sort
STRONG

Creates a cache where cached types are strongly referenced.

public static final TypeCache.Sort
WEAK

Creates a cache where cached types are wrapped by WeakReferences.

Constructor Summary

AccessConstructor and Description
private
Sort()

Method Summary

Modifier and TypeMethod and Description
public static TypeCache.Sort
public static TypeCache.Sort[]
protected abstract Object

Returns:

The reference that represents the type.
wrap
(Class<?>
The type to wrap.
type
)

Wraps a type as a Reference.

Inherited from java.lang.Enum:
clonecompareTodescribeConstableequalsfinalizegetDeclaringClasshashCodenameordinaltoStringvalueOf

Field Detail

SOFTback to summary
public static final TypeCache.Sort SOFT

Creates a cache where cached types are wrapped by SoftReferences.

STRONGback to summary
public static final TypeCache.Sort STRONG

Creates a cache where cached types are strongly referenced.

WEAKback to summary
public static final TypeCache.Sort WEAK

Creates a cache where cached types are wrapped by WeakReferences.

Constructor Detail

Sortback to summary
private Sort()

Method Detail

valueOfback to summary
public static TypeCache.Sort valueOf(String name)
valuesback to summary
public static TypeCache.Sort[] values()
wrapback to summary
protected abstract Object wrap(Class<?> type)

Wraps a type as a Reference.

Parameters
type:Class<?>

The type to wrap.

Returns:Object

The reference that represents the type.

org.easymock.bytebuddy back to summary

protected Class TypeCache.StorageKey

extends WeakReference<ClassLoader>
Class Inheritance

A key used for storing a class loader cache reference.

Field Summary

Modifier and TypeField and Description
private final int
hashCode

The class loader's identity hash code.

Constructor Summary

AccessConstructor and Description
protected
StorageKey(ClassLoader
The represented class loader.
classLoader
,
ReferenceQueue<? super ClassLoader>
The reference queue to notify upon a garbage collection.
referenceQueue
)

Creates a new storage key.

Method Summary

Modifier and TypeMethod and Description
public boolean
equals(Object
the reference object with which to compare.
other
)

Overrides java.lang.Object.equals.

Indicates whether some other object is "equal to" this one.
public int
hashCode()

Overrides java.lang.Object.hashCode.

Returns a hash code value for this object.

Field Detail

hashCodeback to summary
private final int hashCode

The class loader's identity hash code.

Constructor Detail

StorageKeyback to summary
protected StorageKey(ClassLoader classLoader, ReferenceQueue<? super ClassLoader> referenceQueue)

Creates a new storage key.

Parameters
classLoader:ClassLoader

The represented class loader.

referenceQueue:ReferenceQueue<? super ClassLoader>

The reference queue to notify upon a garbage collection.

Method Detail

equalsback to summary
public boolean equals(Object other)

Overrides java.lang.Object.equals.

Doc from java.lang.Object.equals.

Indicates whether some other object is "equal to" this one.

The equals method implements an equivalence relation on non-null object references:

  • It is reflexive: for any non-null reference value x, x.equals(x) should return true.
  • It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.
  • It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.
  • It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified.
  • For any non-null reference value x, x.equals(null) should return false.

An equivalence relation partitions the elements it operates on into equivalence classes; all the members of an equivalence class are equal to each other. Members of an equivalence class are substitutable for each other, at least for some purposes.

Parameters
other:Object

the reference object with which to compare.

Returns:boolean

true if this object is the same as the obj argument; false otherwise.

Annotations
@Override
@SuppressFBWarnings:EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS
justification:Cross-comparison is intended.
hashCodeback to summary
public int hashCode()

Overrides java.lang.Object.hashCode.

Doc from java.lang.Object.hashCode.

Returns a hash code value for this object. This method is supported for the benefit of hash tables such as those provided by java.util.HashMap.

The general contract of hashCode is:

  • Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.
  • If two objects are equal according to the equals method, then calling the hashCode method on each of the two objects must produce the same integer result.
  • It is not required that if two objects are unequal according to the equals method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables.
Returns:int

a hash code value for this object

Annotations
@Override
org.easymock.bytebuddy back to summary

public Class TypeCache.WithInlineExpunction<S>

extends TypeCache<S>
Class Inheritance
Type Parameters
<S>
The type of the key that is used for identifying stored classes per class loader. Such keys must not strongly reference any types or class loaders without potentially corrupting the garbage eligibility of stored classes. As the storage is segmented by class loader, it is normally sufficient to store types by their name.

An implementation of a TypeCache where obsolete references are cleared upon any call.
See Also
TypeCache

Field Summary

Inherited from org.easymock.bytebuddy.TypeCache:
cachesort

Constructor Summary

AccessConstructor and Description
public
WithInlineExpunction()

Creates a new type cache with inlined expunction and strong references to the stored types.

public
WithInlineExpunction(TypeCache.Sort
The reference type to use for stored types.
sort
)

Creates a new type cache with inlined expunction.

Method Summary

Modifier and TypeMethod and Description
public Class<?>
find(ClassLoader
The class loader for which this type is stored.
classLoader
,
S
The key for the type in question.
key
)

Overrides org.easymock.bytebuddy.TypeCache.find.

Finds a stored type or returns null if no type was stored.
public Class<?>
findOrInsert(ClassLoader
The class loader for which this type is stored.
classLoader
,
S
The key for the type in question.
key
,
Callable<Class<?>>
A lazy creator for the type to insert of no previous type was stored in the cache.
builder
)

Overrides org.easymock.bytebuddy.TypeCache.findOrInsert.

Finds an existing type or inserts a new one if the previous type was not found.
public Class<?>
findOrInsert(ClassLoader
The class loader for which this type is stored.
classLoader
,
S
The key for the type in question.
key
,
Callable<Class<?>>
A lazy creator for the type to insert of no previous type was stored in the cache.
builder
,
Object
A monitor to lock before creating the lazy type.
monitor
)

Overrides org.easymock.bytebuddy.TypeCache.findOrInsert.

Finds an existing type or inserts a new one if the previous type was not found.
public Class<?>
insert(ClassLoader
The class loader for which this type is stored.
classLoader
,
S
The key for the type in question.
key
,
Class<?>
The type to insert of no previous type was stored in the cache.
type
)

Overrides org.easymock.bytebuddy.TypeCache.insert.

Inserts a new type into the cache.
Inherited from org.easymock.bytebuddy.TypeCache:
clearexpungeStaleEntries

Constructor Detail

WithInlineExpunctionback to summary
public WithInlineExpunction()

Creates a new type cache with inlined expunction and strong references to the stored types.

WithInlineExpunctionback to summary
public WithInlineExpunction(TypeCache.Sort sort)

Creates a new type cache with inlined expunction.

Parameters
sort:TypeCache.Sort

The reference type to use for stored types.

Method Detail

findback to summary
public Class<?> find(ClassLoader classLoader, S key)

Overrides org.easymock.bytebuddy.TypeCache.find.

Doc from org.easymock.bytebuddy.TypeCache.find.

Finds a stored type or returns null if no type was stored.

Parameters
classLoader:ClassLoader

The class loader for which this type is stored.

key:S

The key for the type in question.

Returns:Class<?>

The stored type or null if no type was stored.

findOrInsertback to summary
public Class<?> findOrInsert(ClassLoader classLoader, S key, Callable<Class<?>> builder)

Overrides org.easymock.bytebuddy.TypeCache.findOrInsert.

Doc from org.easymock.bytebuddy.TypeCache.findOrInsert.

Finds an existing type or inserts a new one if the previous type was not found.

Parameters
classLoader:ClassLoader

The class loader for which this type is stored.

key:S

The key for the type in question.

builder:Callable<Class<?>>

A lazy creator for the type to insert of no previous type was stored in the cache.

Returns:Class<?>

The lazily created type or a previously submitted type for the same class loader and key combination.

findOrInsertback to summary
public Class<?> findOrInsert(ClassLoader classLoader, S key, Callable<Class<?>> builder, Object monitor)

Overrides org.easymock.bytebuddy.TypeCache.findOrInsert.

Doc from org.easymock.bytebuddy.TypeCache.findOrInsert.

Finds an existing type or inserts a new one if the previous type was not found.

Parameters
classLoader:ClassLoader

The class loader for which this type is stored.

key:S

The key for the type in question.

builder:Callable<Class<?>>

A lazy creator for the type to insert of no previous type was stored in the cache.

monitor:Object

A monitor to lock before creating the lazy type.

Returns:Class<?>

The lazily created type or a previously submitted type for the same class loader and key combination.

insertback to summary
public Class<?> insert(ClassLoader classLoader, S key, Class<?> type)

Overrides org.easymock.bytebuddy.TypeCache.insert.

Doc from org.easymock.bytebuddy.TypeCache.insert.

Inserts a new type into the cache. If a type with the same class loader and key was inserted previously, the cache is not updated.

Parameters
classLoader:ClassLoader

The class loader for which this type is stored.

key:S

The key for the type in question.

type:Class<?>

The type to insert of no previous type was stored in the cache.

Returns:Class<?>

The supplied type or a previously submitted type for the same class loader and key combination.