java.util.IllegalFormatConversionException: %d can't format [Ljava.lang.Object; arguments
java.util.IllegalFormatConversionException: %d can't format [Ljava.lang.Object; arguments
最近再使用kotlin
对 context.getString(@StringRes int resId, Object... formatArgs)
方法封装时,产生错误的示例如下:
fun Int.value(vararg formatArgs: Any) = context.getString(this, formatArgs)
当我在使用时,调用R.string.abc.value(123)
时,出现了java.util.IllegalFormatConversionException: %d can't format [Ljava.lang.Object; arguments
错误,经过源码进行java
代码转换时发现:
this.context.getString($this$value, new Object[]{formatArgs});
formatArgs
参数变成了new Object[]{formatArgs}
,这明显是不对的,最终改正为:
fun Int.value(vararg formatArgs: Any) = context.getString(this, *formatArgs)
总结:
在使用kotlin调用java函数时,一定要注意:如果java方法中含有Object...args
可变参数数组时,对应的kotlin代码是vararg *args
。