Kotlin - 如何获取注释属性值

Ace*_*Yin 9 annotations kotlin

比方说,我有一个带注释的Kotlin类:

@Entity @Table(name="user") data class User (val id:Long, val name:String)
Run Code Online (Sandbox Code Playgroud)

如何从@Table注释中获取name属性的值?

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?
}
Run Code Online (Sandbox Code Playgroud)

Jay*_*ard 13

你可以简单地说:

val table = c.annotations.find { it is Table } as? Table
println(table?.name)
Run Code Online (Sandbox Code Playgroud)

注意,我使用了is运算符,因为注释具有RUNTIME保留,因此它是Table集合中注释的实际实例.但以下适用于任何注释:

val table = c.annotations.find { it.annotationClass == Table::class } as? Table
Run Code Online (Sandbox Code Playgroud)