Kotlin中如何将数据类列表转换为Pair数组传入函数?
问题
定义了如下数据类:
data class BrushStopColors( val stopPoint: Float, val color: Int, )
并创建了对应的列表:
val brushStopColors = listOf( BrushStopColors(0.3F, 1), BrushStopColors(1F, 1), )
希望将其中的color从Int转换为String,生成可传入以下函数的参数:
fun verticalGradient(vararg colorStops: Pair<Float, String>){ /// 内部代码 }
但使用如下代码转换时出现类型不匹配错误:
val brushArray = brushStopColors.map { it.color.toString() }.toTypedArray() verticalGradient(*brushArray)
错误信息:
Type mismatch. Required: Array<out Pair<Float, String>> Found: Array<String>
请问该如何正确转换以匹配函数参数类型?
解决方法
你之前的map操作仅提取并转换了color字段,生成的是String类型集合,但函数需要的是Pair<Float, String>类型的数组。正确的做法是将每个BrushStopColors对象完整映射为符合要求的Pair:
val brushArray = brushStopColors.map { it.stopPoint to it.color.toString() }.toTypedArray() verticalGradient(*brushArray)
说明
- 原代码的
map逻辑只生成了List<String>,转成数组后类型为Array<String>,与函数要求的Array<Pair<Float, String>>完全不匹配,因此报错。 - 修改后的
map操作通过it.stopPoint to it.color.toString(),把每个BrushStopColors实例转换成Pair<Float, String>,转成数组后正好满足verticalGradient函数的vararg参数类型要求。
内容的提问来源于stack exchange,提问作者Compose Learner
相关产品推荐
相关产品推荐

