2016-10-01 4 views
5

сказать, у меня есть один класс Котлин с аннотациями:Котлин - как получить значение атрибута аннотаций

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

Как я могу получить значение имени атрибута из @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? 
} 

ответ

7

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

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 
+0

'find' является эквивалентом' firstOrNull', не 'first' – Ilya

+0

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

Смежные вопросы