高端网站建设公司哪家服务态度好,网站建设公司 跨界鱼科技专业,vs中做网站怎么设置图片标准,wordpress 4.0 主题点击跳转Unity3D特效百例点击跳转案例项目实战源码点击跳转游戏脚本-辅助自动化点击跳转Android控件全解手册点击跳转Scratch编程案例点击跳转软考全系列
#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧#xff0c;以及各种资源分享Unity3D特效百例点击跳转案例项目实战源码点击跳转游戏脚本-辅助自动化点击跳转Android控件全解手册点击跳转Scratch编程案例点击跳转软考全系列
关于作者 专注于Android/Unity和各种游戏开发技巧以及各种资源分享网站、工具、素材、源码、游戏等 有什么需要欢迎底部卡片私我交流让学习不再孤单。 实践过程
问题
这两天我想封装一个方法
private fun strFormatTwo(format: String, vararg args: Any): String {return String.format(format, args)
}传递两个参数一个是转换格式一个是可变参数。 调用strFormatTwo(“%04x”,20,30) 一运行就会报错。 java.util.IllegalFormatConversionException: x ! [Ljava.lang.Object; 这就很莫名其妙但是为什么系统的 String.format 就可以这样操作呢 我点击去看源码 发现它有个星号*开始查阅资料。
解决
查了一下。星号的作用是在数组对象前加*号可以将数组展开以方便传值。 展开这有什么可展开的难道传递的少了 咱们写个方法测试一些
private fun strFormat(format: String, vararg args: Any): String {Log.e(TAG, strFormat: args.size)return String.format(format, args)
}private fun strFormatTwo(format: String, vararg args: Any): String {Log.e(TAG, strFormatTwo: args.size)return strFormat(format, args)
// return String.format(format, args)
}//调用
strFormatTwo(%04x,20,30)上面方法因为系统的 String.format 里面没法打日志我们只好再写一个方法这样调用一下。 strFormatTwo 调用系统 String.format 和 strFormatTwo 调用咱们写的 strFormat 方法形式是一样。
我们先调用 strFormatTwo 看到日志输出的是 2 个长度单位在 strFormat 中输出却成为了一个长度。
private fun strFormat(format: String, vararg args: Any): String {return String.format(format, *args) //带星号正确写法
}这是因为 Java 中的 vararg 参数在被传递给 String.format() 方法时会自动被转换为一个数组。这表示我们将 args 数组作为参数传递给 String.format() 方法。这样做是为了确保 args 数组能够以参数的形式传递给 String.format() 方法以便正确地进行格式化字符串。 而在出现问题的函数中我们使用了 “String.format(format, args)” 的写法这表示我们将 args 作为一个单个的参数传递给 String.format() 方法。这样做会导致 args 数组无法正确传递给 String.format() 方法从而导致错误。 因此为了确保 args 数组能够以参数的形式传递给 String.format() 方法我们应该使用第一个函数的实现方式即使用 “String.format(format, *args)” 的写法。
同理如果你自己的其他函数参数也是可变数组的而传递的也是数组使用的时候就需要添加*
其他 作者小空和小芝中的小空 转载说明-务必注明来源https://zhima.blog.csdn.net/ 这位道友请留步☁️我观你气度不凡谈吐间隐隐有王者霸气日后定有一番大作为旁边有点赞收藏今日传你点了吧未来你成功☀️我分文不取若不成功⚡️也好回来找我。 温馨提示点击下方卡片获取更多意想不到的资源。