Intereting Posts
Почему я не могу использовать @PublishedApi для typealias? Не удалось установить ViewModel на Kotlin Как справляться с проблемой перегрузки неоднозначность функций с дженериками? Метод расширения Kotlin как псевдоним для длинного имени метода? Как вы объявляете глобальную переменную для MediaPlayer? Каков самый умный способ скопировать карту в Котлин? Как поймать множество исключений в то же время в Котлине Как установить «sourceCompatibility» для Kotlin и Gradle? jmethodID был NULL для метода с Kotlin Java.lang.ClassNotFoundException: Не нашел класс Kotlin Как отладить «ошибку SQL (запрос) или отсутствующую базу данных» в приложении для Android? Android Kotlin передает значение с текстовых полей на numberPicker Анимация вложенного фрагмента в фрагменте ViewPager запускается перед рендерингом Параметры обобщенного типа более высокого порядка (или рекурсивные?) В котлине Потоки, выполняемые последовательно

Что такое открытое свойство? Почему я не могу сделать свой сеттер частным?

В чем разница между Property и Open Property в Котлине? В приведенном ниже кодере жалуется, что я объявляю setter private, и Intellij говорит, что частные настройки не разрешены для открытых свойств. Что такое открытое свойство?

@RestController open class ParameterController { @Autowired lateinit var parameterRepository: ParameterRepository private set //error } 

Почему код выше недействителен, но этот код?

 open class ItemPrice{ lateinit var type: String private set // ok } 

EDIT: Я использую плагин spring-allopen, и обозначение класса явно открытым не имеет никакого значения.

Solutions Collecting From Web of "Что такое открытое свойство? Почему я не могу сделать свой сеттер частным?"

Что такое открытое свойство?

Открытое свойство, которое означает, что его getter / setter (?) Не является окончательным . С другой стороны, его геттер и сеттер могут быть переопределены его подклассами.

В kotlin все объявлено конечным ключевым словом, кроме интерфейса , класса аннотаций , закрытого класса , класса enum , переменных , изменяемого поля поддержки свойств и параметров , но неизменные переменные & параметры являются эффектно-окончательными .

Благодаря плагину allopen все свойства и методы будут открыты в пружинных компонентах.

Однако свойство open не может создавать частный сеттер, если свойство открыто , например:

 //v--- allopen plugin will remove all `final` keyword, it is equivalent to `open` open var value: String=""; private set // ^--- ERROR:private set are not allowed 

Поэтому вы должны сделать свойство окончательным явно, например:

 //v--- makes it final explicitly by `final` keyword final var value: String =""; private set