Аннотации Использование сайта цели
Когда вы аннотируете свойство или параметр первичного конструктора, существует несколько элементов Java которые генерируются из соответствующего элемента Kotlin и, следовательно, из нескольких возможных мест для аннотации в сгенерированном байт-коде Java. Чтобы указать, как именно должна создаваться аннотация, используйте следующий синтаксис:
class Example(@field:Ann val foo, // annotate Java field
@get:Ann val bar, // annotate Java getter
@param:Ann val quux) // annotate Java constructor parameter
Тот же синтаксис можно использовать для аннотирования всего файла. Для этого поместите аннотацию с целью file
на верхнем уровне файла, перед директивой пакета или перед всем импортом, если файл находится в пакете по умолчанию:
@file:JvmName("Foo")
package org.jetbrains.demo
Если у вас есть несколько аннотаций с одной и той же целью, вы можете избежать повторения цели, добавив скобки после цели и поместив все аннотации в скобках:
class Example {
@set:[Inject VisibleForTesting]
var collaborator: Collaborator
}
Полный список поддерживаемых целей сайта использования:
file
; property
(аннотации с этой целью не видны для Java); field
; get
(получатель свойства); set
(установщик свойства); receiver
(параметр приемника функции расширения или свойства); param
(параметр конструктора); setparam
(параметр установщика свойства); delegate
(поле, в котором хранится экземпляр делегата для делегированного свойства).
Чтобы аннотировать параметр получателя функции расширения, используйте следующий синтаксис: * 1 062 *
fun @receiver:Fancy String.myExtension() { ... }
Если вы не укажете цель сайта использования, цель будет выбрана в соответствии с аннотацией @Target
используемой аннотации. Если имеется несколько применимых целей, используется первая применимая цель из следующего списка: