Reuben Thomas
Reuben Thomas

Reputation: 744

How can I define one Java annotation in terms of another?

For example, I'd like to have @Nonnegative, defined as @Min(0), and @DaySeconds, defined as @Min(0) @Max(86399).

Upvotes: 7

Views: 302

Answers (1)

Tunaki
Tunaki

Reputation: 137084

Both @Min and @Max annotations can be used on annotations themselves. This is called constraint composition.

As such, you can define a new constraint DaySeconds like this:

@Min(0)
@Max(86399)
@Target( { METHOD, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = {})
@Documented
public @interface DaySeconds {

    String message() default "{your.message}";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

}

It would be the same for @Nonnegative.

Upvotes: 5

Related Questions