Kotlin 因为CassName未通过类型名检查而导致的代码块错误
我试图初始化一个属性,但CodeBlock#of在CodeBlock#argToType中抛出一个IllegalArgumentException 我在CodeBlock#argToType上查找了错误的根本原因。 即使Kotlin 因为CassName未通过类型名检查而导致的代码块错误,kotlin,kotlinpoet,Kotlin,Kotlinpoet,我试图初始化一个属性,但CodeBlock#of在CodeBlock#argToType中抛出一个IllegalArgumentException 我在CodeBlock#argToType上查找了错误的根本原因。 即使o是一个类名(也是一个类型名),它也不会通过is TypeName->o检查并抛出IllegalArguementException val initString = "mutableMapOf(Pair(%T, %T), Pair(%T, %T))" val initArgs
o
是一个类名(也是一个类型名),它也不会通过is TypeName->o
检查并抛出IllegalArguementException
val initString = "mutableMapOf(Pair(%T, %T), Pair(%T, %T))"
val initArgs = arraysOf(...)
CodeBlock.of(initString, initArgs)
我希望代码块能够正确构建,但它却抛出了
IllegalArguementException
我重现了您的问题,并且能够修复它;我认为关键问题是如何将initArgs传递给CodeBlock.of:此方法需要第二个varargs参数,但传递的是单个数组值
按以下方式更改代码似乎有效:
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")
}
fun main(args:Array){
val initString=“mutableMapOf(对(%T,%T),对(%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”)
}
关键点是将*initArgs
传递,而不是initArgs
,作为CodeBlock.of
的第二个参数
我显式初始化了initArgs
”值,以匹配%T
占位符期望值
我希望这能帮助你 啊,这是有道理的,虽然对科特林来说并不完全陌生,但我当然还是不完全了解。我的想法是,如果varargs在方法中被视为一个数组,那么传递一个已经生成的数组就可以了。感谢
*数组提示。我会在有机会的时候加上它,不过我会把它标记为解决了,因为我认为这是我的问题。谢谢:D