我会重写你这样用通配符稍微加入:
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