# Interface ModelSet<T>

Type Parameters:
  `T` - the type of model object

All Superinterfaces:
  `Collection<T>, Iterable<T>, ModelElement, Named, Set<T>`

@Incubating public interface ModelSet<T> extends Set<T>, ModelElement
A set of managed model objects.

`Managed` types may declare managed set properties. Managed sets can only contain managed types.

Managed set objects cannot be mutated via the mutative methods of the `Set` interface (e.g. `Set.add(Object)`, `Set.clear()`). To add elements to the set, the `create(Action)` method can be used.

- ## Nested Class Summary

  ### Nested classes/interfaces inherited from interface Named

  `Named.Namer`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `afterEach(Action<? super T> configAction)`
  Apply the given action to each set element just before it is considered to be realised.
  `void`
  `beforeEach(Action<? super T> configAction)`
  Apply the given action to each set element just after it is created.
  `void`
  `create(Action<? super T> action)`
  Declares a new set element, configured by the given action.

  ### Methods inherited from interface Collection

  `parallelStream, removeIf, stream, toArray`

  ### Methods inherited from interface Iterable

  `forEach`

  ### Methods inherited from interface ModelElement

  `getDisplayName, getName`

  ### Methods inherited from interface Set

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

- ## Method Details

  - ### create

    void create(Action<? super T> action)
    Declares a new set element, configured by the given action.
    Parameters:
      `action` - the object configuration

  - ### beforeEach

    void beforeEach(Action<? super T> configAction)
    Apply the given action to each set element just after it is created.

    The configuration action is equivalent in terms of lifecycle to `Defaults` rule methods.

    Parameters:
      `configAction` - the object configuration

  - ### afterEach

    void afterEach(Action<? super T> configAction)
    Apply the given action to each set element just before it is considered to be realised.

    The configuration action is equivalent in terms of lifecycle to `Finalize` rule methods.

    Parameters:
      `configAction` - the object configuration