2017-06-29 25 views
7

Próbowałem utworzyć funkcję bez zwracania wartości w Kotlin. I napisałem funkcję jak w Javie, ale z Kotlin składniCo oznacza typ zwrotu Void w Kotlin

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

i mam błąd

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

Po kilku zmianach Mam funkcji pracujących z wartości pustych Pustki jako typ zwracany. Ale to nie jest dokładnie to, czego potrzebuję

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

Według Kotlin documentation Typ urządzenia odnosi się do typu void w Javie. Więc prawidłowa funkcja bez powrotu wartości w Kotlin jest

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

Albo

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

Pytanie brzmi: Co Void znaczy w Kotlin, jak go używać i co jest zaletą takiego zastosowania?

Odpowiedz

7

Void to zwykła klasa Java i nie ma specjalnego znaczenia w Kotlin.

W ten sam sposób można użyć Integer w Kotlin, który jest klasą Java (ale powinien używać koduKotlina). Poprawnie wspominałeś o obu sposobach, aby niczego nie zwrócić. Tak więc w Kotlin Void jest "coś"!

Otrzymany komunikat o błędzie informuje dokładnie o tym. Podałeś klasę (Java) jako typ zwracany, ale nie użyłeś instrukcji return w bloku.

Kij z tym, jeśli nie chcesz, aby powrócić niczego:

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

Void to obiekt w Javie, a znaczy tyle co "nic".
W Kotlin, istnieją wyspecjalizowane typy dla 'nic':

  • Unit -> zastępuje Java void
  • Nothing -> 'to wartość, która nie istnieje'

Teraz w Kotlin ciebie może odniesienie Void, tak jak można odwoływać się do dowolnej klasy z Java, ale naprawdę nie powinno. Zamiast tego użyj Unit. Ponadto, jeśli zwrócisz Unit, możesz go pominąć.

+2

'Void' (co jest naprawdę: [' java.lang.Void'] (http://docs.oracle. com/javase/8/docs/api/java/lang/Void.html)) nie jest * obiektem *, jest * klasą * w Javie. Nie możesz tworzyć wystąpień tej klasy. – Jesper