lo riscrivo vostro ci uniamo un po 'come questo con un jolly:
fun <T: Enum<*>> Class<T>.join(skipFirst: Int = 0, skipLast: Int = 0): String {
return this.enumConstants
.drop(skipFirst)
.dropLast(skipLast)
.map { e -> e.name }
.joinToString()
}
Quindi, supponendo che il MyStringEnum è definita in questo modo:
enum class MyStringEnum { FOO, BAR, BAZ }
si può chiamare in questo modo:
per ottenere uscita "FOO, BAR, BAZ"
Poiché si sta definendo join su Class, è necessario un oggetto Class effettivo per chiamarlo. Apparentemente le classi Enum non funzionano in questo modo, ma le enumerazioni definite possono generare una classe con javaClass
. Quindi questo è il meglio che ho potuto trovare e penso che soddisfi lo spirito generale della tua richiesta. Non so se c'è un modo più elegante per ottenere ciò che stai cercando di fare per tutte le classi enum come questa.
EDIT: Si può stringere questo un po 'di più con questo:
fun Enum<*>.join(skipFirst: Int = 0, skipLast: Int = 0): String {
return this.javaClass.join(skipFirst, skipLast)
}
che consente di chiamare in questo modo:
println(MyStringEnum.values()[0].join())
fonte
2016-03-13 05:18:39
Buona chiamata, sono relativamente nuovo a Kotlin e mi sono dimenticato di KClass – geg