在 Kotlin 中注释 属性 时,注释的默认目标是什么?

What is the default target for an annotation when annotating property in Kotlin?

Kotlin 中的注释可以有不同的使用位置目标,如下所述:https://kotlinlang.org/docs/reference/annotations.html#annotation-use-site-targets

我的问题是:当未明确定义 use-site 时,在下面的示例中在 class 中注释 属性 时的默认目标是什么?

class Test {
  @SomeAnnotation
  var someProperty: String? = null
}

背景

我正在尝试将 Jongo 作为 Kotlin 中的 MongoDB 客户端,但在注释 id 字段时遇到问题。当像这样注释时,Jongo 没有正确映射 id 属性:

@MongoId @MongoObjectId var id: String? = null

有问题的注释只是 Jackson 的元注释。但是,当我像这样注释 属性 时它似乎起作用,表明使用站点问题:

@field:[MongoId MongoObjectId]
var id: String? = null

我希望 @field 是默认使用站点,但似乎不是。

reference 说:

If you don’t specify a use-site target, the target is chosen according to the @Target annotation of the annotation being used. If there are multiple applicable targets, the first applicable target from the following list is used:

  • param (constructor parameter)
  • property (annotations with this target are not visible to Java)
  • field

因此,如果您的注释具有 @Target({ElementType.FIELD}),则 Kotlin 中的注释将以 @field: 为目标。

如果没有指定 @Target,它可以用在任何程序元素上:@property: 目标也适用并且默认选择。