2017-10-26 20 views
4

文字列とリスナー(swiftのclosureに似ています)パラメータを持つkotlinメソッドです。型の不一致推論型がUnitですが、Voidが予想されました

fun testA(str: String, listner: (lstr: String) -> Void) { 

} 

これをこのように呼び出す。

testA("hello") { lstr -> 
    print(lstr) 
} 

Error: Type mismatch inferred type is Unit but Void was expected

何の単位?クロージャの戻り値の型はVoidです。他の多くの質問を読んでくださいが、この簡単な方法で何が起きているのかを知ることができます。

答えて

2

を動作するはずです。だから、Kotlinに値を返さず、正しい機能が

fun hello(name: String): Unit { 
    println("Hello $name"); 
} 

それとも、必要Void(それはまれに有用だが、と相互運用する場合可能性を行う場合は何も

fun hello(name: String) { 
    println("Hello $name"); 
} 

1

コトルはVoidの代わりに何も返さないメソッドにはUnitを使用します。それは、Kotlinのドキュメントによるとユニットのタイプは、Javaでvoid型に対応

fun testA(str: String, listner: (lstr: String) -> Unit) { 

} 
1

を使用しないでJavaコード)の場合、Voidはインスタンスを持たないと定義されているため、nullを返す必要があります(Scala/Kotlin Unitとは対照的に、 hはちょうど1つ):

fun testA(str: String, listner: java.util.function.Function<String, Void?>) { 
... 
} 

testA(("hello") { lstr -> 
    print(lstr) 
    null 
} 
+0

最後の行に 'null'がありますか?または 'return null'? – Bilal

+0

"ラムダの値を修飾されたリターン構文で明示的に返すことができます。それ以外の場合は、最後の式の値が暗黙的に返されます。 https://kotlinlang.org/docs/reference/lambdas.html –

関連する問題