在我的(2.0.0.M6)kotlin-spring启动应用程序中,当我做的时候一切正常
fun main(args: Array<String>) {
runApplication<MyApplication>(*args)
}
但是无法找到mainClass,而且当我这样做时,IDEA不允许运行应用程序
fun main(args: Array<String>) = runApplication<RankedApplication>(*args)
这根本不重要,但我想知道:为什么?
答案 0 :(得分:5)
runApplication
不会返回Unit
。
main
的签名和返回类型必须:
fun main(Array<String>): Unit
runApplication
,returns a ConfigurableApplicationContext
。
你的&#34;主要&#34;方法相当于:
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
(单个对象)是指定none时的默认返回类型,并且在声明为返回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[])
。
答案 1 :(得分:2)
fun main(args: Array<String>) {
runApplication<MyApplication>(*args)
}
main
隐含地返回Unit
,这是正确的。
这里
fun main(args: Array<String>) = runApplication<RankedApplication>(*args)
从给定表达式推断返回类型为Unit
之外的其他内容(因为runApplication
返回某些内容),这不起作用,因为main函数必须返回Unit
。