# Class Attribute<T>

java.lang.Object
org.gradle.api.attributes.Attribute<T>

Type Parameters:
  `T` - the type of the named attribute

All Implemented Interfaces:
  `Named`

public class Attribute<T> extends Object implements Named
An attribute is a named entity with a type. It is used in conjunction with a `AttributeContainer` to provide a type safe container for attributes. This class isn't intended to store the value of an attribute, but only represent the identity of the attribute. It means that an attribute must be immutable and can potentially be pooled. Attributes can be created using the `factory method`.

Supported attribute value types are: `String`, `Boolean`, any subtype of `Number`, and any type implementing `Named`. `of(String, Class)` emits a deprecation warning for any other type — including plain Java `Enum` types that do not implement `Named` — and this will become an error in Gradle 10.

Since:
  3.3

- ## Nested Class Summary

  ### Nested classes/interfaces inherited from interface Named

  `Named.Namer`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `equals(Object o)`
  `String`
  `getName()`
  Returns the name of the attribute.
  `Class<T>`
  `getType()`
  Returns the type of this attribute.
  `int`
  `hashCode()`
  `static <T> Attribute<T>`
  `of(Class<T> type)`
  Creates a new attribute of the given type, inferring the name of the attribute from the simple type name.
  `static <T> Attribute<T>`
  `of(String name, Class<T> type)`
  Creates a new attribute of the given name with the given type.
  `String`
  `toString()`

  ### Methods inherited from class Object

  `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- ## Method Details

  - ### of

    public static <T> Attribute<T> of(String name, Class<T> type)
    Creates a new attribute of the given name with the given type. There's no guarantee that subsequent calls to this method with the same attributes would either return the same instance or different instances of `Attribute`, so consumers are required to compare the attributes with the `equals(Object)` method.
    Type Parameters:
      `T` - the type of the attribute
    Parameters:
      `name` - the name of the attribute
      `type` - the class of the attribute; must be `String`, `Boolean`, a subtype of `Number`, or a subtype of `Named`
    Returns:
      an attribute with the given name and type
    Since:
      3.3

  - ### of

    public static <T> Attribute<T> of(Class<T> type)
    Creates a new attribute of the given type, inferring the name of the attribute from the simple type name. This method is useful when there's supposedly only one attribute of a specific type in a container, so there's no need to distinguish by name (but the returned type doesn't enforce it). There's no guarantee that subsequent calls to this method with the same attributes would either return the same instance or different instances of `Attribute`, so consumers are required to compare the attributes with the `equals(Object)` method.
    Type Parameters:
      `T` - the type of the attribute
    Parameters:
      `type` - the class of the attribute
    Returns:
      an attribute with the given name and type
    Since:
      3.3

  - ### getName

    public String getName()
    Returns the name of the attribute.
    Specified by:
      `getName` in interface `Named`
    Returns:
      the name of the attribute.

  - ### getType

    public Class<T> getType()
    Returns the type of this attribute.
    Returns:
      the type of this attribute.
    Since:
      3.3

  - ### equals

    public boolean equals(Object o)
    Overrides:
      `equals` in class `Object`

  - ### hashCode

    public int hashCode()
    Overrides:
      `hashCode` in class `Object`

  - ### toString

    public String toString()
    Overrides:
      `toString` in class `Object`