我会用通配符稍微改写你的加入:
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())