Package org.springframework.core

# Interface AttributeAccessor

All Known Implementing Classes:
  `AttributeAccessorSupport`

public interface AttributeAccessor
Interface defining a generic contract for attaching and accessing metadata to/from arbitrary objects.

Since:
  2.0
Author:
  Rob Harrop, Sam Brannen

## Method Summary

Modifier and Type
Method
Description
`String[]`
`attributeNames()`
Return the names of all attributes.
`default <T> T`
`computeAttribute(String name, Function<String,T> computeFunction)`
Compute a new value for the attribute identified by `name` if necessary and set the new value in this `AttributeAccessor`.
`Object`
`getAttribute(String name)`
Get the value of the attribute identified by `name`.
`boolean`
`hasAttribute(String name)`
Return `true` if the attribute identified by `name` exists.
`Object`
`removeAttribute(String name)`
Remove the attribute identified by `name` and return its value.
`void`
`setAttribute(String name, Object value)`
Set the attribute defined by `name` to the supplied `value`.

## Method Details

### setAttribute

void setAttribute(String name, @Nullable Object value)
Set the attribute defined by `name` to the supplied `value`.

If `value` is `null`, the attribute is `removed`.

In general, users should take care to prevent overlaps with other metadata attributes by using fully-qualified names, perhaps using class or package names as prefix.

Parameters:
  `name` - the unique attribute key
  `value` - the attribute value to be attached

### getAttribute

@Nullable Object getAttribute(String name)
Get the value of the attribute identified by `name`.

Return `null` if the attribute doesn't exist.

Parameters:
  `name` - the unique attribute key
Returns:
  the current value of the attribute, if any

### computeAttribute

default <T> T computeAttribute(String name, Function<String,T> computeFunction)
Compute a new value for the attribute identified by `name` if necessary and set the new value in this `AttributeAccessor`.

If a value for the attribute identified by `name` already exists in this `AttributeAccessor`, the existing value will be returned without applying the supplied compute function.

The default implementation of this method is not thread safe but can be overridden by concrete implementations of this interface.

Type Parameters:
  `T` - the type of the attribute value
Parameters:
  `name` - the unique attribute key
  `computeFunction` - a function that computes a new value for the attribute name; the function must not return a `null` value
Returns:
  the existing value or newly computed value for the named attribute
Since:
  5.3.3
See Also:
  - `getAttribute(String)`
  - `setAttribute(String, Object)`

### removeAttribute

@Nullable Object removeAttribute(String name)
Remove the attribute identified by `name` and return its value.

Return `null` if no attribute under `name` is found.

Parameters:
  `name` - the unique attribute key
Returns:
  the last value of the attribute, if any

### hasAttribute

boolean hasAttribute(String name)
Return `true` if the attribute identified by `name` exists.

Otherwise return `false`.

Parameters:
  `name` - the unique attribute key

### attributeNames

String[] attributeNames()
Return the names of all attributes.