Event
Date: 2015-09-11

javax.enterprise.event

## Interface Event<T>

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

      public interface Event<T>

  Allows the application to fire events of a particular type.

  Beans fire events via an instance of the `Event` interface, which may be injected:

       @Inject @Any Event<LoggedInEvent> loggedInEvent;

  The `fire()` method accepts an event object:

       public void login() {
          ...
          loggedInEvent.fire( new LoggedInEvent(user) );
       }

  Any combination of qualifiers may be specified at the injection point:

       @Inject @Admin Event<LoggedInEvent> adminLoggedInEvent;

  Or, the `@Any` qualifier may be used, allowing the application to specify qualifiers dynamically:

       @Inject @Any Event<LoggedInEvent> loggedInEvent;

  For an injected `Event`:

  - the specified type is the type parameter specified at the injection point, and
  - the specified qualifiers are the qualifiers specified at the injection point.

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `fire(T event)` Fires an event with the specified qualifiers and notifies observers.
    `Event<T>` | `select(java.lang.annotation.Annotation... qualifiers)` Obtains a child `Event` for the given additional required qualifiers.
    `<U extends T> Event<U>` | `select(java.lang.Class<U> subtype, java.lang.annotation.Annotation... qualifiers)` Obtains a child `Event` for the given required type and additional required qualifiers.
    `<U extends T> Event<U>` | `select(TypeLiteral<U> subtype, java.lang.annotation.Annotation... qualifiers)` Obtains a child `Event` for the given required type and additional required qualifiers.

- - ### Method Detail

    - #### fire

          void fire(T event)

      Fires an event with the specified qualifiers and notifies observers.

      Parameters:
        `event` - the event object
      Throws:
        `java.lang.IllegalArgumentException` - if the runtime type of the event object contains a type variable

    - #### select

          Event<T> select(java.lang.annotation.Annotation... qualifiers)

      Obtains a child `Event` for the given additional required qualifiers.

      Parameters:
        `qualifiers` - the additional specified qualifiers
      Returns:
        the child `Event`
      Throws:
        `java.lang.IllegalArgumentException` - if passed two instances of the same qualifier type, or an instance of an annotation that is not a qualifier type

    - #### select

          <U extends T> Event<U> select(java.lang.Class<U> subtype,
                                      java.lang.annotation.Annotation... qualifiers)

      Obtains a child `Event` for the given required type and additional required qualifiers.

      Type Parameters:
        `U` - the specified type
      Parameters:
        `subtype` - a `Class` representing the specified type
        `qualifiers` - the additional specified qualifiers
      Returns:
        the child `Event`
      Throws:
        `java.lang.IllegalArgumentException` - if passed two instances of the same qualifier type, or an instance of an annotation that is not a qualifier type

    - #### select

          <U extends T> Event<U> select(TypeLiteral<U> subtype,
                                      java.lang.annotation.Annotation... qualifiers)

      Obtains a child `Event` for the given required type and additional required qualifiers.

      Type Parameters:
        `U` - the specified type
      Parameters:
        `subtype` - a `TypeLiteral` representing the specified type
        `qualifiers` - the additional specified qualifiers
      Returns:
        the child `Event`
      Throws:
        `java.lang.IllegalArgumentException` - if passed two instances of the same qualifier type, or an instance of an annotation that is not a qualifier type