Kotlin中如何向String.format传递vararg参数?
解决方案
问题核心是Kotlin的IntArray与Java可变参数Object...的类型适配问题:
- 你的
vararg arg: Int在函数内部是IntArray类型,直接传递arg会把整个数组作为单个参数传给String.format,而格式符%d需要的是单个int值,因此抛出类型转换异常。 - 直接用
*arg无效是因为Kotlin不会自动将IntArray的元素装箱为Integer(Java的Object子类),而String.format需要的是Object类型的可变参数。
修改代码如下:
fun execute(userId: UserId, action: Action, vararg arg: Int){ dataRepository.logAction(userId, String.format(action.log, *arg.toTypedArray())) }
原理说明
arg.toTypedArray()将IntArray转换为Array<Int>,Kotlin会自动将每个Int元素装箱为Integer。- 用展开运算符
*把Array<Int>的元素逐个传递给String.format的可变参数,匹配格式符的参数要求。
内容的提问来源于stack exchange,提问作者Alexandre Herbreteau
相关产品推荐
相关产品推荐

