2017-06-29 15 views
7

Kotlinで値を返さずに関数を作成しようとしました。そして私は、Javaのように機能を書いたが、Kotlinの構文を持つKotlinでVoid戻り型が意味するもの

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

そして私は、私は戻り値の型としてNULL可能ボイドと機能を作業持っている変化のカップルの後にエラー

Error:A 'return' expression required in a function with a block body ('{...}')

を持っています。しかし、それはKotlin documentationユニットの種類によると、私は

fun hello(name: String): Void? { 
    println("Hello $name"); 
    return null 
} 

必要正確に何ではありませんが、Javaのvoid型に対応しています。だから、Kotlinに値を返さず、正しい機能が

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

それとも

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

ある質問は:何をVoidは、それを使用する方法、Kotlinに意味し、このような使用の利点は何でしょうか?

答えて

7

Voidは、Javaクラスであり、Kotlinでは特別な意味を持ちません。

同様に、Javaクラス(ただし、KotlinのIntを使用する必要があります)であるKotlinでIntegerを使用することができます。あなたは何も返さないように両方の方法を正しく言いました。だから、KotlinでVoidは "何か"です!

エラーメッセージが表示されますが、そのことを正確に示しています。戻り型として(Java)クラスを指定しましたが、ブロック内でreturnステートメントを使用しませんでした。これに

スティック、あなたが何かを返すようにしたくない場合は:

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

VoidはJavaのオブジェクトで、「何もない」という意味です。 Kotlinで
、 '何もない' の専門的なタイプがあります。

  • Unit - >置き換えJavaのvoid
  • Nothing - Kotlinあなたで今

を> 'が存在したことがない、値'あなたがJavaからどんなクラスも参照することができるように、参照Voidでも、本当にすべきではありません。代わりに、Unitを使用してください。また、Unitを返す場合は省略できます。

+2

'本当にあるVoid'(:[' java.lang.Void'](http://docs.oracle。 com/javase/8/docs/api/java/lang/Void.html))は*オブジェクト*ではなく、Javaの*クラス*です。このクラスのインスタンスを作成することはできません。 – Jesper

関連する問題