2016-10-01 69 views
5

i ek açıklamalarla bir Kotlin sınıf var, demek açıklama nitelik değeri elde etmek:Kotlin nasıl

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

Nasıl @ tablo ek açıklamadan name özelliğinin değeri alabilirim?

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

cevap

7

Sadece yapabilirsiniz: ek açıklama RUNTIME tutmaya sahiptir ve bu nedenle koleksiyon içindeki Table ek açıklama gerçek bir örneğidir beri

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

Not, ben is operatörü kullanılır. Ama her ek açıklaması için aşağıdaki çalışır:

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

'find' firstOrNull'' eşdeğerdir değil 'tam olarak ters geçici hemen cevap bu konuda endişe değil basitleştirilmiş edildi aklımda, – Ilya

+0

yep first'. –