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

时间:2016-02-12 11:12:44

标签: 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
}

背景

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

@MongoId @MongoObjectId var id: String? = null

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

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

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

1 个答案:

答案 0 :(得分:6)

reference说:

  

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

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

因此,如果您的注释具有@Target({ElementType.FIELD}),则Kotlin中的注释将定位@field:

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