Kotlin中String.format动态接收任意长度List参数的代码重构问题
Kotlin 可变参数格式化重构方案
直接使用 Kotlin 展开运算符适配任意长度参数,无需维护分支判断,重构后代码如下:
private fun formatTest(args: List<String>?): String { // args.orEmpty() 兼容入参为null的场景,展开运算符*将数组转为可变长参数传入format方法 return java.lang.String.format(code.message, *args.orEmpty().toTypedArray()) }
方案说明
java.lang.String.format第二个参数本身是可变长参数,Kotlin 中使用*运算符即可将数组直接展开为可变长参数传入,天然适配任意长度的入参列表,后续参数个数增加到5、10都不需要修改逻辑- 原有代码中使用
args?.size说明入参args是可空类型,args.orEmpty()会在args为null时返回空列表,空列表转数组传入的效果和原有else分支的无额外参数调用完全一致 - 如果需要避免占位符数量和入参数量不匹配的问题,可以自行补充校验逻辑,示例如下:
private fun formatTest(args: List<String>?): String { val actualArgs = args.orEmpty() // 示例:校验占位符数量和入参数量是否匹配,可根据业务需求调整 val placeholderCount = "%[\\d\\$]*[sdf]".toRegex().findAll(code.message).count() check(actualArgs.size == placeholderCount) { "占位符数量为${placeholderCount},入参数量为${actualArgs.size},两者不匹配" } return java.lang.String.format(code.message, *actualArgs.toTypedArray()) }
内容的提问来源于stack exchange,提问作者양기열
相关产品推荐
相关产品推荐

