Kotlin — как получить значение атрибута аннотации

#annotations #kotlin

#аннотации #kotlin

Вопрос:

скажем, у меня есть один класс Kotlin с аннотациями:

 @Entity @Table(name="user") data class User (val id:Long, val name:String)
  

Как я могу получить значение атрибута name из аннотации @Table?

 fun <T> tableName(c: KClass<T>):String {
    // i can get the @Table annotation like this:
    val t = c.annotations.find { it.annotationClass == Table::class }
    // but how can i get the value of "name" attribute from t?
}
  

Ответ №1:

Вы можете просто:

 val table = c.annotations.find { it is Table } as? Table
println(table?.name)
  

Обратите внимание, я использовал is оператор, поскольку аннотация имеет RUNTIME сохранение, и поэтому она является фактическим экземпляром Table аннотации в коллекции. Но для любой аннотации работает следующее:

 val table = c.annotations.find { it.annotationClass == Table::class } as? Table
  

Комментарии:

1. find эквивалентно firstOrNull , не first

2. да, на мой взгляд, это было временно назад, просто упростил ответ, не беспокоясь об этом.