2016-02-12 95 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'屬性。 –