我试图用以下函数扩展String类型的枚举类,但无法在调用站点使用它:

fun <T: Enum<String>> Class<T>.join(skipFirst: Int = 0, skipLast: Int = 0): String {
    return this.enumConstants
        .drop(skipFirst)
        .dropLast(skipLast)
        .map { e -> e.name }
        .joinToString()
}

MyStringEnum.join(1, 1);

What am I doing wrong here?

推荐答案

我建议采取以下解决方案:

fun <T : Enum<*>> KClass<T>.join(skipFirst: Int = 0, skipLast: Int = 0): String {
    return this.java
            .enumConstants
            .drop(skipFirst)
            .dropLast(skipLast)
            .map { e -> e.name }
            .joinToString()
}

Instead of attaching extension function to Class, i attached it to KotlinClass.

现在,您可以简单地使用它:

enum class Test {ONE, TWO, THREE }

fun main(args: Array<String>) {
    println(Test::class.join())
}
// ONE, TWO, THREE

Kotlin相关问答推荐

无法访问类kotlin.coroutines.CoroutineContext';.判断模块类路径中是否存在丢失或冲突的依赖项

"Kotlin中的表达式

Kotlin stlib中是否有用于将列表<;对<;A,B&>;转换为对<;列表<;A&>,列表<;B&>;的函数

修改器的属性是什么,我需要更改以使角变圆且宽度更小?喷气背包组合

Kotlin 启动与启动(Dispatchers.Default)

使用 Discord4j 交叉发布 Discord 消息

如何将字符串格式化为电话号码kotlin算法

Kotlin 使用迭代索引过滤 lambda 数组

Kotlin 无法找到或加载主类

如何使用 gradle 脚本 Kotlin 构建文件构建可运行的 ShadowJar?

创建首选项屏幕时找不到androidx.preference.PreferenceScreen

零安全的好处

如何在主线程上使用 Kotlin 协程 await()

作为 Kotlin 中的函数的结果,如何从 Firestore 数据库返回列表?

requireNotNull vs sure !! 操作符

Kotlin get字段注释始终为空

Kotlin flatMap - map

在 Android 12 (SDK 31) 中获取 android.app.ForegroundServiceStartNotAllowedException

Kotlin中对象和数据类的区别是什么?

Android Jetpack Compose - 图像无法zoom 到框的宽度和高度