Annotation Type Producer


@Target(PARAMETER) @Retention(CLASS) @Documented public @interface Producer
Identifies a parameter has the ability to produce a Throwable or a super type of a Throwable. The parameter type must be a Function or a BiFunction.

For a Function the input parameter must be a String which will be the message associated with the method. The result type must Throwable or a super type of a Throwable.

For a BiFunction one of the input parameters must be a String which will be the message associated with the method. The other input parameter must be a Throwable or a super type of a Throwable and must be assignable from the parameter annotated with Cause. The result type must Throwable or a super type of a Throwable.

Example

 @Message("The operation failed due to %s")
  T operationFailed(@Producer Functioninvalid input: '<'String, T> function, String op);

 @Message("The operation failed due to %s")
  T operationFailed(@Producer BiFunctioninvalid input: '<'String, Throwable, T> function, @Cause Throwable cause, String op);

 

Example Usage

 throw Bundle.MESSAGES.operationFailed(IllegalArgumentException::new, "start");

 throw Bundle.MESSAGES.operationFailed(IllegalStateException::new, cause, "start");

 

Author:
James R. Perkins