ワイルドカードを使用して、結合を次のように少し書き直します。
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」を取得する
クラスで結合を定義しているので、それを呼び出す実際のクラス オブジェクトが必要です。列挙型クラスは明らかにそのようには機能しませんが、その定義された列挙型はクラス with を生成できjavaClass
ます。したがって、これは私が思いつくことができる最高のものであり、あなたの要求の一般的な精神を満たしていると思います. このようなすべての列挙型クラスに対してやろうとしていることを達成するためのよりエレガントな方法があるかどうかはわかりません。
編集:これを使用して、これをもう少し締めることができます:
fun Enum<*>.join(skipFirst: Int = 0, skipLast: Int = 0): String {
return this.javaClass.join(skipFirst, skipLast)
}
次のように呼び出すことができます。
println(MyStringEnum.values()[0].join())