我會重寫你這樣用通配符稍微加入:
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()
}
然後,假設您的MyStringEnum的定義是這樣的:
enum class MyStringEnum { FOO, BAR, BAZ }
你可以這樣調用:
println(MyStringEnum.values()[0].javaClass.join())
獲得輸出「FOO,BAR,BAZ」
由於您在Class上定義了聯接,因此您需要一個實際的Class對象來調用它。枚舉類顯然不能像那樣工作,但是其定義的枚舉可以產生一個類javaClass
。所以這是我能想到的最好的,我認爲符合你的要求的一般精神。我不知道是否有一種更優雅的方式來實現你想爲所有像這樣的枚舉類做什麼。
編輯:
fun Enum<*>.join(skipFirst: Int = 0, skipLast: Int = 0): String {
return this.javaClass.join(skipFirst, skipLast)
}
,它可以讓你調用這樣的:你可以多一點點這種收緊這件事
println(MyStringEnum.values()[0].join())
好的電話,我對Kotlin比較陌生,忘記了KClass – geg