org.qi4j.api.common

## Annotation Type Optional

-     @Retention(value=RUNTIME)
      @Target(value={PARAMETER,METHOD,FIELD})
      @Documented
      public @interface Optional

  Annotation to denote that something is optional.
  - If applied to a method parameter, then the value is allowed to be null. Default is that method parameters have to be non-null.
  - If applied to a Property declaration, then the value may be null after construction of the instance, or may be set to null at a later time.
  - If applied to an injected member field, it is allowed tha none get injected. For instance, an `@Optional @Service` would allow a service to not have been declared and the field will be null.

  Optionality is not the default in Zest, and if injections, property values and parameters in methods are not non-null, the Zest runtime will throw an `ConstraintViolationException`, indicating which field/property/parameter in which composite and mixin the problem has been detected.

  Example;

       @Optional @Service
       MyService service;   // If no MyService instance is declared and visible to this service injection point
                            // the 'service' field will be null.

       @Service
       YourService other;   // If no YourService instance is declared and visible to this service injection point
                            // the Zest runtime will throw a ConstraintViolationException.