CodeBlock 抛出 IAE 因为 CassName 没有通过是 TypeName 检查
CodeBlock throwing IAE because CassName does not pass is TypeName check
我尝试初始化 属性,尽管 CodeBlock#of 在 CodeBlock#argToType
中抛出 IllegalArgumentException
我调查了 CodeBlock#argToType 错误的根本原因。
即使 o
是一个类名(也是一个类型名),它也不会通过 is TypeName -> o
检查并抛出 IllegalArguementException。
val initString = "mutableMapOf(Pair(%T, %T), Pair(%T, %T))"
val initArgs = arraysOf(...)
CodeBlock.of(initString, initArgs)
我希望 CodeBlock 能够正确构建,但它抛出了 IllegalArguementException
我重现了你的问题并且能够修复它;我认为关键问题是 如何将 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
' 值 type 值,以匹配 %T
占位符期望。
希望对您有所帮助!
我尝试初始化 属性,尽管 CodeBlock#of 在 CodeBlock#argToType
中抛出 IllegalArgumentException我调查了 CodeBlock#argToType 错误的根本原因。
即使 o
是一个类名(也是一个类型名),它也不会通过 is TypeName -> o
检查并抛出 IllegalArguementException。
val initString = "mutableMapOf(Pair(%T, %T), Pair(%T, %T))"
val initArgs = arraysOf(...)
CodeBlock.of(initString, initArgs)
我希望 CodeBlock 能够正确构建,但它抛出了 IllegalArguementException
我重现了你的问题并且能够修复它;我认为关键问题是 如何将 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
' 值 type 值,以匹配 %T
占位符期望。
希望对您有所帮助!