0

我试图初始化一个属性,尽管 CodeBlock#of 在 CodeBlock#argToType 中抛出了 IllegalArgumentException

我调查了 CodeBlock#argToType 错误的根本原因。即使o是 ClassName(也是 TypeName),它也不会通过is TypeName -> o检查并抛出 IllegalArguementException。

val initString = "mutableMapOf(Pair(%T, %T), Pair(%T, %T))"
val initArgs = arraysOf(...)
CodeBlock.of(initString, initArgs)

我希望 CodeBlock 能够正确构建,但它却抛出了IllegalArguementException

4

1 回答 1

1

我重现了您的问题并能够解决它;我认为关键问题是如何将 initArgs 传递给 CodeBlock.of:此方法需要第二个 varargs 参数,但您传递的是单个 Array<...> 值。

如下更改代码似乎可行:

fun main(args: Array<String>) {
    val initString = "mutableMapOf(Pair(%T, %T), Pair(%T, %T))"
    val initArgs = arrayOf(String::class.java, String::class.java, String::class.java, String::class.java)
    val result = CodeBlock.of(initString, *initArgs)
    println("result is $result")
}

关键是传递*initArgs,而不是initArgs作为 的第二个参数CodeBlock.of

为了匹配占位符的期望,我明确地初始化了initArgs' 值和类型值。%T

我希望这可以帮助你!

于 2019-06-13T06:38:08.427 回答