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

Kre*_*sek 2 annotations jackson kotlin jongo

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

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

class Test {
  @SomeAnnotation
  var someProperty: String? = null
}
Run Code Online (Sandbox Code Playgroud)

背景

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

@MongoId @MongoObjectId var id: String? = null
Run Code Online (Sandbox Code Playgroud)

有问题的注释只是杰克逊的元注释.但是,当我像这样注释属性时,它似乎工作,表明使用现场问题:

@field:[MongoId MongoObjectId]
var id: String? = null
Run Code Online (Sandbox Code Playgroud)

我希望这@field是默认的使用网站,但似乎不是.

hot*_*key 6

参考说:

如果未指定使用地点目标,则根据@Target正在使用的注释的注释选择目标.如果有多个适用目标,则使用以下列表中的第一个适用目标:

  • param (构造函数参数)
  • property (具有此目标的注释对Java不可见)
  • field

因此,如果你的注释有@Target({ElementType.FIELD}),那么Kotlin中的注释将成为目标@field:.

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