Ace.Yin
Ace.Yin

Reputation: 917

Kotlin - how to get annotation attribute value

say, i have one Kotlin class with annotations:

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

How can i get the value of name attribute from @Table annotation?

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?
}

Upvotes: 22

Views: 25450

Answers (1)

Jayson Minard
Jayson Minard

Reputation: 85946

You can simply:

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

Note, I used the is operator since the annotation has RUNTIME retention and therefore it is an actual instance of the Table annotation within the collection. But the following works for any annotation:

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

Upvotes: 34

Related Questions