Mapbox Android SDK v9到v10:IntArray版Expression.inExpression迁移
Mapbox Android SDK v9至v10:IntArray过滤图层要素代码迁移方案
问题原因
v10版本中,Expression.literal()不再支持直接传入IntArray,且接受List<Any>的重载被标记为internal(内部API,不允许外部调用),导致原v9代码无法兼容。
迁移方案
使用Expression.array()构建数组字面量表达式,配合Expression.in$()(因in是Kotlin关键字,v10中函数名改为in$)实现过滤逻辑,具体步骤如下:
- 将
IntArray转换为List<Int>,便于后续映射处理 - 把列表中的每个整数转换为
Expression.literal()实例 - 通过
Expression.array()将这些字面量组合成数组表达式 - 传入
Expression.in$()完成过滤条件构建
代码示例
// 原v9代码 // val filter = Expression.inExpression(Expression.get("id"), Expression.literal(intArray)) // v10迁移后的代码 val targetIds = intArrayOf(1, 3, 5) // 你的目标ID数组 val idLiterals = targetIds.map { Expression.literal(it) }.toTypedArray() val filter = Expression.in$( Expression.get("id"), Expression.array(*idLiterals) )
补充说明
Expression.in$()的第二个参数要求是数组类型的表达式,Expression.array()是官方推荐的创建字面量数组的方式,可灵活适配不同长度的ID集合。
内容的提问来源于stack exchange,提问作者Nate Irwin
相关产品推荐
相关产品推荐

