java.util.IllegalFormatConversionException: %d can't format [Ljava.lang.Object; arguments

java.util.IllegalFormatConversionException: %d can't format [Ljava.lang.Object; arguments

最近再使用kotlincontext.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





posted @ 2020-11-23 11:01  jxiaow  阅读(292)  评论(0编辑  收藏  举报