Spring boot 为什么Kotlin main vararg args:String不能直接传递给SpringBoot';什么是RUN应用程序?
我想检查在启动SpringBoot应用程序时是否可以避免使用spread操作符 因此,与往常不同的是:Spring boot 为什么Kotlin main vararg args:String不能直接传递给SpringBoot';什么是RUN应用程序?,spring-boot,kotlin,Spring Boot,Kotlin,我想检查在启动SpringBoot应用程序时是否可以避免使用spread操作符 因此,与往常不同的是: fun main(args: Array<String>) { runApplication<Application>(*args) } 反编译的是: public static final ConfigurableApplicationContext runApplication(@NotNull String... args) {...} 我假设vara
fun main(args: Array<String>) {
runApplication<Application>(*args)
}
反编译的是:
public static final ConfigurableApplicationContext runApplication(@NotNull String... args) {...}
我假设vararg-args:String
相当于Java的String…
有人对此有解释吗?提前谢谢 提供了以下示例:
fun <T> asList(vararg ts: T): List<T> {
val result = ArrayList<T>()
for (t in ts) // ts is an Array
result.add(t)
return result
}
fun asList(vararg ts:T):List{
val result=ArrayList()
for(ts中的t)//ts是一个数组
结果。添加(t)
返回结果
}
并指出:
在函数内部,类型为T的vararg参数以T的数组形式可见,即上面示例中的ts变量具有类型为的数组
从中我们可以看到,vararg被转换为接收它的函数内部的数组。因此,您只能通过使用*
扩展它,将其传播到运行应用程序
你还说:
我假设vararg args:String等同于Java的String
您正确地假设,它是等效的,但这并不意味着它是相同的
Kotlin这样做是为了解决Java造成的歧义。例如,如果您有一个对象…
参数,并将数组类型的单个数组传递给它。编译器应该将其作为Array
类型的单个对象读取,还是作为Fizz
类型的多个参数读取
在Kotlin中,通过提供(或不提供)扩展运算符*fun main(vararg args:String)来区分这两种情况{
println(args::class.java)
运行应用程序(*args)
}
印刷品:
class[Ljava.lang.String;
像java数组这样的接缝不能传递给kotlin的vararg
public static final ConfigurableApplicationContext runApplication(@NotNull String... args) {...}
fun <T> asList(vararg ts: T): List<T> {
val result = ArrayList<T>()
for (t in ts) // ts is an Array
result.add(t)
return result
}