Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 因为CassName未通过类型名检查而导致的代码块错误_Kotlin_Kotlinpoet - Fatal编程技术网

Kotlin 因为CassName未通过类型名检查而导致的代码块错误

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

我试图初始化一个属性,但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)

我希望代码块能够正确构建,但它却抛出了
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