2017-11-28 10 views
0

私はkotlin springbootアプリケーション - なぜ式の本体に関数がありませんか?

fun main(args: Array<String>) { 
    runApplication<MyApplication>(*args) 
} 

を行うときに、私の(2.0.0.M6)kotlinスプリングブートアプリでは、すべてが正常に動作しますが、mainClassが見つからないとIDEAは私が

を行うときにアプリを実行することはできません。
fun main(args: Array<String>) = runApplication<RankedApplication>(*args) 

これはまったく重要ではありませんが、なぜですか?

答えて

4

runApplicationUnitを返しません。

署名とmainの型を返すには、正確でなければなりません:

fun main(Array<String>): Unit 

runApplication、しかし、returns a ConfigurableApplicationContext

あなたの「主な」方法は同等です:戻り値の型が表現から推定されているので

fun main(args: Array<String>): ConfigurableApplicationContext { 
    return runApplication<MyApplication>(*args) 
} 

- あなたはこれが有効なエントリー・ポイントではありません見ることができます。

fun main(args: Array<String>) { 
    runApplication<MyApplication>(*args) 
} 

Unit(シングルトンオブジェクト)以来

fun main(args: Array<String>): Unit { 
    runApplication<MyApplication>(*args) 
    return Unit 
} 

と同じであるので、あなたの第1の方法は何も指定されていないデフォルトの戻り値の型で、暗黙的に返される作品Unitを返すと宣言されたメソッドの終わり。

これは、引数なしのreturnが有効である理由です。これはUnitを返します。


あなたがしたい場合、あなたは、これはおそらく行き過ぎですがUnitに物事を変換するための方法を作ることができます。 mainメソッドのシグネチャはpublic static void main(String[])でなければなりません - この要件はどこから来るそうです

inline fun Unit(lambda:() -> Any?) { 
    lambda() 
} 

... 

fun main(args: Array<String>) = Unit { runApplication<MyApplication>(*args) } 

It's the same in Java、。

+0

絶対的な感謝をします、ありがとう! –

2
fun main(args: Array<String>) { 
    runApplication<MyApplication>(*args) 
} 

main戻り正しい暗黙ここUnit。ここで

fun main(args: Array<String>) = runApplication<RankedApplication>(*args) 

戻り値の型がUnit以外のものに与えられた式から推測される

主な機能は持っているので動作しません(runApplication戻って何かがあるため)Unitを戻します。

関連する問題