Почему канонический конструктор записи Java не может иметь более ограничительный доступ, чем уровень записи?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему канонический конструктор записи Java не может иметь более ограничительный доступ, чем уровень записи?

Сообщение Anonymous »

У меня возникла ситуация, когда я хочу, чтобы экземпляры записей определенного типа можно было создавать только с использованием фабричного метода в отдельном классе в том же пакете. Причина этого в том, что перед созданием записи мне необходимо выполнить значительный объем проверки.
Запись предназначена для использования в качестве носителя данных проверенных полей, но проверка не может происходят в конструкторе записи, поскольку для фактического выполнения проверки нам требуется доступ к некоторым сложным объектам валидатора.
Поскольку передача объектов валидатора конструктору записи будет означать, что они станут частью записи заявите, что это означает, что мы не можем использовать конструктор записи для выполнения проверка записи.
И поэтому я извлек проверку в отдельную фабрику и закодировал что-то вроде этого (фабричный класс и запись в одном пакете):

Код: Выделить всё

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 {
}
}
По какой-то причине вышеизложенное не работает с жалобами IntelliJ:

Код: Выделить всё

Compact constructor access level cannot be more restrictive than the record access level (public)
Я могу избежать этой проблемы, используя обычный класс (который допускает использование одного частного конструктора пакета), но хотелось бы более точно смоделировать данные как запись.Почему существует такое ограничение для записей? Планируется ли снять это ограничение в будущем?

Подробнее здесь: https://stackoverflow.com/questions/649 ... e-access-t
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»