public class AnnotationAttributes
extends java.util.LinkedHashMap<java.lang.String,java.lang.Object>
LinkedHashMap
subclass representing annotation attribute
key-value pairs as read by AnnotationUtils
,
AnnotatedElementUtils
, and Spring's reflection- and ASM-based
AnnotationMetadata
implementations.
Provides 'pseudo-reification' to avoid noisy Map generics in the calling code as well as convenience methods for looking up annotation attributes in a type-safe fashion.
AnnotationUtils.getAnnotationAttributes(java.lang.annotation.Annotation)
,
AnnotatedElementUtils
,
Serialized FormModifier and Type | Field and Description |
---|---|
private java.lang.Class<? extends java.lang.annotation.Annotation> |
annotationType |
(package private) java.lang.String |
displayName |
private static java.lang.String |
UNKNOWN |
(package private) boolean |
validated |
Constructor and Description |
---|
AnnotationAttributes()
Create a new, empty
AnnotationAttributes instance. |
AnnotationAttributes(AnnotationAttributes other)
Create a new
AnnotationAttributes instance, wrapping the provided
map and all its key-value pairs. |
AnnotationAttributes(java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
Create a new, empty
AnnotationAttributes instance for the
specified annotationType . |
AnnotationAttributes(java.lang.Class<? extends java.lang.annotation.Annotation> annotationType,
boolean validated)
Create a possibly already validated new, empty
AnnotationAttributes instance for the specified
annotationType . |
AnnotationAttributes(int initialCapacity)
Create a new, empty
AnnotationAttributes instance with the
given initial capacity to optimize performance. |
AnnotationAttributes(java.util.Map<java.lang.String,java.lang.Object> map)
Create a new
AnnotationAttributes instance, wrapping the provided
map and all its key-value pairs. |
AnnotationAttributes(java.lang.String annotationType,
java.lang.ClassLoader classLoader)
Create a new, empty
AnnotationAttributes instance for the
specified annotationType . |
Modifier and Type | Method and Description |
---|---|
java.lang.Class<? extends java.lang.annotation.Annotation> |
annotationType()
Get the type of annotation represented by this
AnnotationAttributes . |
private void |
assertAttributePresence(java.lang.String attributeName,
java.lang.Object attributeValue) |
private void |
assertAttributeType(java.lang.String attributeName,
java.lang.Object attributeValue,
java.lang.Class<?> expectedType) |
private void |
assertNotException(java.lang.String attributeName,
java.lang.Object attributeValue) |
static AnnotationAttributes |
fromMap(java.util.Map<java.lang.String,java.lang.Object> map)
Return an
AnnotationAttributes instance based on the given map. |
AnnotationAttributes |
getAnnotation(java.lang.String attributeName)
Get the
AnnotationAttributes stored under the specified
attributeName . |
<A extends java.lang.annotation.Annotation> |
getAnnotation(java.lang.String attributeName,
java.lang.Class<A> annotationType)
Get the annotation of type
annotationType stored under the
specified attributeName . |
AnnotationAttributes[] |
getAnnotationArray(java.lang.String attributeName)
Get the array of
AnnotationAttributes stored under the specified
attributeName . |
<A extends java.lang.annotation.Annotation> |
getAnnotationArray(java.lang.String attributeName,
java.lang.Class<A> annotationType)
Get the array of type
annotationType stored under the specified
attributeName . |
private static java.lang.Class<? extends java.lang.annotation.Annotation> |
getAnnotationType(java.lang.String annotationType,
java.lang.ClassLoader classLoader) |
boolean |
getBoolean(java.lang.String attributeName)
Get the value stored under the specified
attributeName as a boolean. |
<T> java.lang.Class<? extends T> |
getClass(java.lang.String attributeName)
Get the value stored under the specified
attributeName as a class. |
java.lang.Class<?>[] |
getClassArray(java.lang.String attributeName)
Get the value stored under the specified
attributeName as an
array of classes. |
<E extends java.lang.Enum<?>> |
getEnum(java.lang.String attributeName)
Get the value stored under the specified
attributeName as an enum. |
<N extends java.lang.Number> |
getNumber(java.lang.String attributeName)
Get the value stored under the specified
attributeName as a number. |
private <T> T |
getRequiredAttribute(java.lang.String attributeName,
java.lang.Class<T> expectedType)
Get the value stored under the specified
attributeName ,
ensuring that the value is of the expectedType . |
java.lang.String |
getString(java.lang.String attributeName)
Get the value stored under the specified
attributeName as a string. |
java.lang.String[] |
getStringArray(java.lang.String attributeName)
Get the value stored under the specified
attributeName as an
array of strings. |
java.lang.Object |
putIfAbsent(java.lang.String key,
java.lang.Object value)
Store the supplied
value in this map under the specified
key , unless a value is already stored under the key. |
java.lang.String |
toString() |
private java.lang.String |
valueToString(java.lang.Object value) |
clear, containsValue, entrySet, forEach, get, getOrDefault, keySet, removeEldestEntry, replaceAll, values
clone, compute, computeIfAbsent, computeIfPresent, containsKey, isEmpty, merge, put, putAll, remove, remove, replace, replace, size
private static final java.lang.String UNKNOWN
@Nullable private final java.lang.Class<? extends java.lang.annotation.Annotation> annotationType
final java.lang.String displayName
boolean validated
public AnnotationAttributes()
AnnotationAttributes
instance.public AnnotationAttributes(int initialCapacity)
AnnotationAttributes
instance with the
given initial capacity to optimize performance.initialCapacity
- initial size of the underlying mappublic AnnotationAttributes(java.util.Map<java.lang.String,java.lang.Object> map)
AnnotationAttributes
instance, wrapping the provided
map and all its key-value pairs.map
- original source of annotation attribute key-value pairsfromMap(Map)
public AnnotationAttributes(AnnotationAttributes other)
AnnotationAttributes
instance, wrapping the provided
map and all its key-value pairs.other
- original source of annotation attribute key-value pairsfromMap(Map)
public AnnotationAttributes(java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
AnnotationAttributes
instance for the
specified annotationType
.annotationType
- the type of annotation represented by this
AnnotationAttributes
instance; never null
AnnotationAttributes(java.lang.Class<? extends java.lang.annotation.Annotation> annotationType, boolean validated)
AnnotationAttributes
instance for the specified
annotationType
.annotationType
- the type of annotation represented by this
AnnotationAttributes
instance; never null
validated
- if the attributes are considered already validatedpublic AnnotationAttributes(java.lang.String annotationType, @Nullable java.lang.ClassLoader classLoader)
AnnotationAttributes
instance for the
specified annotationType
.annotationType
- the annotation type name represented by this
AnnotationAttributes
instance; never null
classLoader
- the ClassLoader to try to load the annotation type on,
or null
to just store the annotation type name@Nullable private static java.lang.Class<? extends java.lang.annotation.Annotation> getAnnotationType(java.lang.String annotationType, @Nullable java.lang.ClassLoader classLoader)
@Nullable public java.lang.Class<? extends java.lang.annotation.Annotation> annotationType()
AnnotationAttributes
.null
if unknownpublic java.lang.String getString(java.lang.String attributeName)
attributeName
as a string.attributeName
- the name of the attribute to get;
never null
or emptyjava.lang.IllegalArgumentException
- if the attribute does not exist or
if it is not of the expected typepublic java.lang.String[] getStringArray(java.lang.String attributeName)
attributeName
as an
array of strings.
If the value stored under the specified attributeName
is
a string, it will be wrapped in a single-element array before
returning it.
attributeName
- the name of the attribute to get;
never null
or emptyjava.lang.IllegalArgumentException
- if the attribute does not exist or
if it is not of the expected typepublic boolean getBoolean(java.lang.String attributeName)
attributeName
as a boolean.attributeName
- the name of the attribute to get;
never null
or emptyjava.lang.IllegalArgumentException
- if the attribute does not exist or
if it is not of the expected typepublic <N extends java.lang.Number> N getNumber(java.lang.String attributeName)
attributeName
as a number.attributeName
- the name of the attribute to get;
never null
or emptyjava.lang.IllegalArgumentException
- if the attribute does not exist or
if it is not of the expected typepublic <E extends java.lang.Enum<?>> E getEnum(java.lang.String attributeName)
attributeName
as an enum.attributeName
- the name of the attribute to get;
never null
or emptyjava.lang.IllegalArgumentException
- if the attribute does not exist or
if it is not of the expected typepublic <T> java.lang.Class<? extends T> getClass(java.lang.String attributeName)
attributeName
as a class.attributeName
- the name of the attribute to get;
never null
or emptyjava.lang.IllegalArgumentException
- if the attribute does not exist or
if it is not of the expected typepublic java.lang.Class<?>[] getClassArray(java.lang.String attributeName)
attributeName
as an
array of classes.
If the value stored under the specified attributeName
is a class,
it will be wrapped in a single-element array before returning it.
attributeName
- the name of the attribute to get;
never null
or emptyjava.lang.IllegalArgumentException
- if the attribute does not exist or
if it is not of the expected typepublic AnnotationAttributes getAnnotation(java.lang.String attributeName)
AnnotationAttributes
stored under the specified
attributeName
.
Note: if you expect an actual annotation, invoke
getAnnotation(String, Class)
instead.
attributeName
- the name of the attribute to get;
never null
or emptyAnnotationAttributes
java.lang.IllegalArgumentException
- if the attribute does not exist or
if it is not of the expected typepublic <A extends java.lang.annotation.Annotation> A getAnnotation(java.lang.String attributeName, java.lang.Class<A> annotationType)
annotationType
stored under the
specified attributeName
.attributeName
- the name of the attribute to get;
never null
or emptyannotationType
- the expected annotation type; never null
java.lang.IllegalArgumentException
- if the attribute does not exist or
if it is not of the expected typepublic AnnotationAttributes[] getAnnotationArray(java.lang.String attributeName)
AnnotationAttributes
stored under the specified
attributeName
.
If the value stored under the specified attributeName
is
an instance of AnnotationAttributes
, it will be wrapped in
a single-element array before returning it.
Note: if you expect an actual array of annotations, invoke
getAnnotationArray(String, Class)
instead.
attributeName
- the name of the attribute to get;
never null
or emptyAnnotationAttributes
java.lang.IllegalArgumentException
- if the attribute does not exist or
if it is not of the expected typepublic <A extends java.lang.annotation.Annotation> A[] getAnnotationArray(java.lang.String attributeName, java.lang.Class<A> annotationType)
annotationType
stored under the specified
attributeName
.
If the value stored under the specified attributeName
is
an Annotation
, it will be wrapped in a single-element array
before returning it.
attributeName
- the name of the attribute to get;
never null
or emptyannotationType
- the expected annotation type; never null
java.lang.IllegalArgumentException
- if the attribute does not exist or
if it is not of the expected typeprivate <T> T getRequiredAttribute(java.lang.String attributeName, java.lang.Class<T> expectedType)
attributeName
,
ensuring that the value is of the expectedType
.
If the expectedType
is an array and the value stored
under the specified attributeName
is a single element of the
component type of the expected array type, the single element will be
wrapped in a single-element array of the appropriate type before
returning it.
attributeName
- the name of the attribute to get;
never null
or emptyexpectedType
- the expected type; never null
java.lang.IllegalArgumentException
- if the attribute does not exist or
if it is not of the expected typeprivate void assertAttributePresence(java.lang.String attributeName, java.lang.Object attributeValue)
private void assertNotException(java.lang.String attributeName, java.lang.Object attributeValue)
private void assertAttributeType(java.lang.String attributeName, java.lang.Object attributeValue, java.lang.Class<?> expectedType)
public java.lang.Object putIfAbsent(java.lang.String key, java.lang.Object value)
value
in this map under the specified
key
, unless a value is already stored under the key.putIfAbsent
in interface java.util.Map<java.lang.String,java.lang.Object>
putIfAbsent
in class java.util.HashMap<java.lang.String,java.lang.Object>
key
- the key under which to store the valuevalue
- the value to storenull
if no
value was previously stored in this mapLinkedHashMap.get(java.lang.Object)
,
HashMap.put(K, V)
public java.lang.String toString()
toString
in class java.util.AbstractMap<java.lang.String,java.lang.Object>
private java.lang.String valueToString(java.lang.Object value)
@Nullable public static AnnotationAttributes fromMap(@Nullable java.util.Map<java.lang.String,java.lang.Object> map)
AnnotationAttributes
instance based on the given map.
If the map is already an AnnotationAttributes
instance, it
will be cast and returned immediately without creating a new instance.
Otherwise a new instance will be created by passing the supplied map
to the AnnotationAttributes(Map)
constructor.
map
- original source of annotation attribute key-value pairs