Использование Micronaut v3.8.6 и Java 19 (предварительные функции активированы), определяя герметичный интерфейс < /p>
19 (предварительный просмотр), определяя герметичный интерфейс < /p>
.
Код: Выделить всё
@Introspected
public sealed interface UserId {
record Identifier(@Positive long value) implements UserId {}
record MailAddress(@EMail String value) implements UserId {}
}
< /code>
Использование этой аннотации < /p>
@Target({PARAMETER, RECORD_COMPONENT, TYPE_USE, CONSTRUCTOR, FIELD, METHOD, ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {})
public @interface EMail {
String message() default "is not a valid email address: ({validatedValue})";
}
< /code>
Ссылка на завод < /p>
@Factory
public class AppConfig {
@Singleton
public ConstraintValidator eMailStringConstraintValidator() {
return (value, annotationMetadata, context) -> EMailAddressConstraints.isValid(value);
}
}
Почему аннотация игнорируется при создании записи? Кстати, я попытался заставить его работать с объявлением канонического конструктора с аннотированными параметрами явно ...
Подробнее здесь: https://stackoverflow.com/questions/757 ... annotation