Android Kotlin - 枚举类作为函数的参数

问题描述 投票:0回答:1

我有几个格式如下的 ENUM:

enum class MyEnum1(val id: Int, val titleId: Int) {
    A1(0, R.string.a1),
    B1(1, R.string.b1),
    ...
}

enum class MyEnum2(val id: Int, val titleId: Int) {
    A2(0, R.string.a2),
    B2(1, R.string.b2),
    ...
}

我还有一个“撰写”对话框,其中列出了这些值,但现在我拥有所有这些枚举 在将其作为参数传递给对话框组件之前,首先将其转换为

List<Pair<Int,Int>>

如何使 Compose 函数具有任何 Enum 类类型的参数? 我想这样称呼我的可组合项:

ListDialog( ..., enum = MyEnum1::class, ...)
also
ListDialog( ..., enum = MyEnum2::class, ...)

然后处理我的数据:

for (item in enum.values()) {
        // something
    }
android function kotlin parameters enums
1个回答
0
投票

我确实没有 Compose 的经验,所以我不确定这一切是如何工作的,但我总体上有 kotlin 的经验。您可以做的是让所有枚举实现一个通用接口。那么这是可能的,例如:

fun main() {
    test(MyEnum1.values())
    test(MyEnum2.values())
}

fun <T : EnumsWithIdAndTitle> test(enum: Array<T>){
    for (item in enum) {
        println(item.titleId)
    }
}

interface EnumsWithIdAndTitle {
    val id: Int
    val titleId: Int
}

enum class MyEnum1(override val id: Int, override val titleId: Int) : EnumsWithIdAndTitle  {
    A1(0, 11),
    B1(1, 22),
}

enum class MyEnum2(override val id: Int, override val titleId: Int) : EnumsWithIdAndTitle {
    A2(0, 33),
    B2(1, 44),
}

那么你可以用我认为类似的方式修改你的

test
,而不是我的
ListDialog
函数

© www.soinside.com 2019 - 2024. All rights reserved.