runApplication 不返回 Unit。
main的签名和返回类型必须准确:
fun main(Array<String>): Unit
runApplication,不过,returns a ConfigurableApplicationContext。
你的“main”方法相当于:
fun main(args: Array<String>): ConfigurableApplicationContext {
return runApplication<MyApplication>(*args)
}
因为返回类型是从表达式推导出来的 - 你可以看到这不是一个有效的入口点。
您的第一种方法有效,因为
fun main(args: Array<String>) {
runApplication<MyApplication>(*args)
}
与
相同
fun main(args: Array<String>): Unit {
runApplication<MyApplication>(*args)
return Unit
}
因为Unit(单例对象)是未指定时的默认返回类型,并且在声明为返回Unit的方法末尾隐式返回。
这也是为什么 return 不带参数是有效的 - 它只返回 Unit。
如果您愿意,您可以创建一种方法将事物转换为 Unit,尽管这可能有点过头了。
inline fun Unit(lambda: () -> Any?) {
lambda()
}
...
fun main(args: Array<String>) = Unit { runApplication<MyApplication>(*args) }
It's the same in Java,这可能是这个要求的来源——主方法的签名必须是public static void main(String[])。