Запись предназначена для использования в качестве носителя данных проверенных полей, но проверка не может происходят в конструкторе записи, поскольку для фактического выполнения проверки нам требуется доступ к некоторым сложным объектам валидатора.
Поскольку передача объектов валидатора конструктору записи будет означать, что они станут частью записи заявите, что это означает, что мы не можем использовать конструктор записи для выполнения проверка записи.
И поэтому я извлек проверку в отдельную фабрику и закодировал что-то вроде этого (фабричный класс и запись в одном пакете):
Код: Выделить всё
package some.package;
// imports.....
@Component
class SomeRecordFactory {
private final SomeValidator someValidator;
private final SomeOtherValidator someOtherValidator;
// Rest of the fields
// ....
// constructor
// ....
public SomeRecord create(...) {
someValidator.validate(....);
someOtherValidator.validate(....);
// .... other validation
return new SomeRecord(...);
}
}
Код: Выделить всё
package some.package;
public record SomeRecord(...) {
/* package-private */ SomeRecord {
}
}
Код: Выделить всё
Compact constructor access level cannot be more restrictive than the record access level (public)
Подробнее здесь: https://stackoverflow.com/questions/649 ... e-access-t
Мобильная версия