będę przepisać dołączyć lekko tak asterisk:
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()
}
Następnie, zakładając swój MyStringEnum jest zdefiniowany następująco:
enum class MyStringEnum { FOO, BAR, BAZ }
można nazwać to tak:
println(MyStringEnum.values()[0].javaClass.join())
, aby uzyskać wyjście "FOO, BAR, BAZ"
Ponieważ definiujesz join na Class, potrzebujesz rzeczywistego obiektu Class, aby go wywołać. Klasy Enum najwyraźniej nie działają tak, ale jego zdefiniowane wyliczenia mogą dać klasę z javaClass
. Więc to jest najlepsze, co mogę wymyślić, że myślę, że spotyka się z ogólnym duchem twojej prośby. Nie wiem, czy istnieje bardziej elegancki sposób na osiągnięcie tego, co próbujesz zrobić dla wszystkich klas wyliczeniowych takich jak ta.
EDIT: Można to dokręcić trochę więcej z tego:
fun Enum<*>.join(skipFirst: Int = 0, skipLast: Int = 0): String {
return this.javaClass.join(skipFirst, skipLast)
}
który pozwala nazwać tak:
println(MyStringEnum.values()[0].join())
Dobra rozmowa, jestem stosunkowo nowa w Kotlin i zapomniałem o KClass – geg