3

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

我的问题是:当未明确定义使用站点时,在类中注释属性时的默认目标是什么,如下例所示?

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是默认使用站点,但似乎不是。

4

1 回答 1

6

参考资料说:

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

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

所以如果你的注解有@Target({ElementType.FIELD}),Kotlin 中的注解将指向@field:.

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

于 2016-02-12T12:34:18.627 回答