2017-06-29 7 views
7

J'ai essayé de créer une fonction sans retourner de valeur dans Kotlin. Et je l'ai écrit une fonction comme en Java, mais avec la syntaxe KotlinQue signifie le type de retour Void dans Kotlin?

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

et j'ai une erreur

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

Après quelques changements que j'ai fonction de travail avec annulable Void comme type de retour. Mais ce n'est pas exactement ce que je dois

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

Selon Kotlin documentation le type d'unité correspond au type de vide en Java. Ainsi, la fonction correcte sans valeur retour dans Kotlin est

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

Ou

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

La question est: Qu'est-ce Void signifie en Kotlin, comment l'utiliser et quel est l'avantage de cette utilisation?

Répondre

7

Void est une classe Java et n'a pas de signification particulière dans Kotlin.

De la même manière, vous pouvez utiliser Integer dans Kotlin, qui est une classe Java (mais qui devrait utiliser le Int de Kotlin). Vous avez correctement mentionné les deux façons de ne rien retourner. Donc, à Kotlin Void est "quelque chose"!

Le message d'erreur que vous obtenez vous le dit exactement. Vous avez spécifié une classe (Java) en tant que type de retour mais vous n'avez pas utilisé l'instruction return dans le bloc.

bâton à cela, si vous ne voulez pas retourner quoi que ce soit:

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

Void est un objet Java et signifie «rien».
En Kotlin, il y a des types spécialisés pour 'rien':

  • Unit -> remplace void de java
  • Nothing -> 'une valeur qui existe jamais'

Maintenant en Kotlin vous peut référence Void, tout comme vous pouvez référencer n'importe quelle classe de Java, mais vous ne devriez pas vraiment. Au lieu de cela, utilisez Unit. En outre, si vous renvoyez Unit, vous pouvez l'omettre.

+2

'Void' (qui est vraiment: [' java.lang.Void'] (http://docs.oracle. com/javase/8/docs/api/java/lang/Void.html)) n'est pas un * objet *, c'est une * classe * en Java. Vous ne pouvez pas créer d'instances de cette classe. – Jesper