如果你想使用
T
在你的函数中,如果它是一个真正的类型,那么它必须被具体化。为了使类型参数具体化,它必须是内联函数的一部分。所以你需要一个内联函数。
下一步是弄清楚泛型。您目前拥有:
<T : Enum<Trait>>
这意味着,由于枚举的性质
T
不可能是别的
Trait
然而,你已经澄清了
特质
是
不
一个枚举,但实际上是一个接口
已实施
通过各种枚举类。所以你真正想要的是
T
受到两者的约束
Enum<T>
和
特质
.
考虑到这一切,我相信你正在寻找的是以下内容:
inline fun <reified T> traits(
selectionState: SnapshotTraitMap<Trait, Boolean>
) where T : Enum<T>, T : Trait {
val chunks = enumValues<T>().toList().chunked(5)
chunks.forEach {
Row {
it.forEach {
TraitIcon(it, selectionState)
}
}
}
}