Место пометки в Kotlin
У одного объявления в Kotlin иногда несколько «слотов»: параметр конструктора, поле, свойство, геттер. Если метку поставить без уточнения, компилятор выбирает цель по умолчанию, и смысл может оказаться не тем, что задумано.
Префикс перед именем пометки задаёт цель явно.
Запись @param:Doc крепит метку к параметру
конструктора. Запись @property:Doc - к
свойству, которое из этого параметра появляется
у класса.
Для учебной подписи к полю профиля оба префикса можно указать на одном параметре:
annotation class Doc(val note: String)
class Profile(
@param:Doc("constructor argument")
@property:Doc("public property")
val handle: String
)
Параметр handle существует только в момент
создания объекта: к нему относится пометка с
@param:. После инициализации снаружи видно
уже свойство handle - для него действует
метка с @property:. Тексты в примере разные,
чтобы в отчётах и инструментах было видно, какая
цель выбрана.
Тот же приём подходит, когда одна строка описания нужна только свойству, а параметр остаётся без отдельной подписи:
annotation class Doc(val note: String)
class Session(
@property:Doc("stored session id")
val id: String
)
fun main() {
val s = Session("s-1")
println(s.id)
}
Объявите метку с параметром note типа
String. Создайте класс заказа с параметром
code в конструкторе: на него повесьте
@param: и @property: с разными
строками.
Добавьте класс склада с одним строковым свойством
из конструктора. Подпись через @property:
должна описывать только свойство, без
@param: на том же параметре.