Package org.gradle.api

# Interface NamedDomainObjectContainer<T>

Type Parameters:
  `T` - The type of domain objects in this container.

All Superinterfaces:
  `Collection<T>`, `org.gradle.util.Configurable<NamedDomainObjectContainer<T>>`, `DomainObjectCollection<T>`, `Iterable<T>`, `NamedDomainObjectCollection<T>`, `NamedDomainObjectSet<T>`, `Set<T>`

All Known Subinterfaces:
  `ArtifactTypeContainer`, `AuthenticationContainer`, `BuildTypeContainer`, `ConfigurationContainer`, `DistributionContainer`, `ExtensiblePolymorphicDomainObjectContainer<T>`, `FlavorContainer`, `IvyConfigurationContainer`, `NativeToolChainRegistry`, `PlatformContainer`, `PlayDistributionContainer`, `PolymorphicDomainObjectContainer<T>`, `PublicationContainer`, `Repositories`, `SourceSetContainer`, `TaskContainer`

public interface NamedDomainObjectContainer<T> extends NamedDomainObjectSet<T>, org.gradle.util.Configurable<NamedDomainObjectContainer<T>>

A named domain object container is a specialisation of `NamedDomainObjectSet` that adds the ability to create instances of the element type.

Implementations may use different strategies for creating new object instances.

Note that a container is an implementation of `SortedSet`, which means that the container is guaranteed to only contain elements with unique names within this container. Furthermore, items are ordered by their name.

See Also:
  - `NamedDomainObjectSet`

## Method Summary

Modifier and Type
Method
Description
`NamedDomainObjectContainer<T>`
`configure(Closure configureClosure)`
Allows the container to be configured, creating missing objects as they are referenced.
`T`
`create(String name)`
Creates a new item with the given name, adding it to this container.
`T`
`create(String name, Closure configureClosure)`
Creates a new item with the given name, adding it to this container, then configuring it with the given closure.
`T`
`create(String name, Action<? super T> configureAction)`
Creates a new item with the given name, adding it to this container, then configuring it with the given action.
`T`
`maybeCreate(String name)`
Looks for an item with the given name, creating and adding it to this container if it does not exist.

### Methods inherited from interface java.util.Collection

`parallelStream, removeIf, stream, toArray`

### Methods inherited from interface org.gradle.api.DomainObjectCollection

`all, all, whenObjectAdded, whenObjectAdded, whenObjectRemoved, whenObjectRemoved, withType, withType`

### Methods inherited from interface java.lang.Iterable

`forEach`

### Methods inherited from interface org.gradle.api.NamedDomainObjectCollection

`add, addAll, addRule, addRule, addRule, findByName, getAsMap, getAt, getByName, getByName, getByName, getNamer, getNames, getRules`

### Methods inherited from interface org.gradle.api.NamedDomainObjectSet

`findAll, matching, matching, withType`

### Methods inherited from interface java.util.Set

`add, addAll, clear, contains, containsAll, equals, hashCode, isEmpty, iterator, remove, removeAll, retainAll, size, spliterator, toArray, toArray`

## Method Details

### create

T create(String name) throws InvalidUserDataException
Creates a new item with the given name, adding it to this container.

Parameters:
  `name` - The name to assign to the created object
Returns:
  The created object. Never null.
Throws:
  `InvalidUserDataException` - if an object with the given name already exists in this container.

### maybeCreate

T maybeCreate(String name)
Looks for an item with the given name, creating and adding it to this container if it does not exist.

Parameters:
  `name` - The name to find or assign to the created object
Returns:
  The found or created object. Never null.

### create

T create(String name, Closure configureClosure) throws InvalidUserDataException
Creates a new item with the given name, adding it to this container, then configuring it with the given closure.

Parameters:
  `name` - The name to assign to the created object
  `configureClosure` - The closure to configure the created object with
Returns:
  The created object. Never null.
Throws:
  `InvalidUserDataException` - if an object with the given name already exists in this container.

### create

T create(String name, Action<? super T> configureAction) throws InvalidUserDataException
Creates a new item with the given name, adding it to this container, then configuring it with the given action.

Parameters:
  `name` - The name to assign to the created object
  `configureAction` - The action to configure the created object with
Returns:
  The created object. Never null.
Throws:
  `InvalidUserDataException` - if an object with the given name already exists in this container.

### configure

NamedDomainObjectContainer<T> configure(Closure configureClosure)

Allows the container to be configured, creating missing objects as they are referenced.

TODO: example usage

Specified by:
  `configure` in interface `org.gradle.util.Configurable<T>`
Parameters:
  `configureClosure` - The closure to configure this container with
Returns:
  This.