2016-02-12 60 views
2

注释在科特林可以有不同的使用网站的目标如下解释:https://kotlinlang.org/docs/reference/annotations.html#annotation-use-site-targets注释Kotlin中的属性时,注释的默认目标是什么?

我的问题是:当没有明确定义使用现场,什么是默认的目标时,注释的类属性就像在下面的例子?

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

背景

我想Jongo在科特林MongoDB的客户端,并有注释id字段的问题。

@MongoId @MongoObjectId var id: String? = null 

有问题的注释是刚刚元注释杰克逊:Jongo不会当它的注释是这样id属性正确映射。然而,似乎当我注释的财产像这样的工作,说明使用现场问题:

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

我预计@field是默认使用现场,但似乎并非如此。

回答

5

reference说:

如果不指定使用站点内的目标,目标是根据使用 到@Target注解注释的选择。如果有 多个适用对象,从 以下列表中的第一个适用的目标时:

  • param(构造函数参数)
  • property(与这一目标的注解是不可见的JAVA)
  • field

所以,如果您的注解有@Target({ElementType.FIELD}),在柯注释tlin将以@field:为目标。

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

+0

啊..我不知何故错过了那部分,即使我正在积极寻找它。这解释了为什么映射不指定@field不起作用。 MongoId没有TARGET,并且属性注释对Java不可见。由于Jongo使用期望字段或getter注释的Jackson,因此无法看到注释。 –

+0

@KresimirNesek你想要它在Jackson的吸气剂上,所以'@get:SomeAnnotation'属性。 –