2017-06-29 28 views
7

Tôi đã cố tạo hàm không trả về giá trị trong Kotlin. Và tôi đã viết một hàm như trong Java nhưng với Kotlin cú phápLoại trả về có nghĩa là gì trong Kotlin

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

và tôi đã có một lỗi

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

Sau vài thay đổi mà tôi đã bị chức năng làm việc với Void nullable như kiểu trả về. Nhưng nó không chính xác những gì tôi cần

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

Theo loại Kotlin documentation Loại đơn vị tương ứng với loại khoảng trống trong Java. Vì vậy, các chức năng chính xác mà không cần trở về giá trị trong Kotlin là

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

Hoặc

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

Câu hỏi đặt ra là: không Void có ý nghĩa gì trong Kotlin, làm thế nào để sử dụng nó và lợi thế của việc sử dụng như vậy là gì?

Trả lời

7

Void là một lớp Java đơn giản và không có ý nghĩa đặc biệt trong Kotlin.

Giống như cách bạn có thể sử dụng Integer trong Kotlin, một lớp Java (nhưng nên sử dụng số Int của Kotlin). Bạn đã đề cập một cách chính xác cả hai cách để không trả lại bất cứ điều gì. Vì vậy, trong Kotlin Void là "một cái gì đó"!

Thông báo lỗi bạn nhận được, cho bạn biết chính xác điều đó. Bạn đã chỉ định một lớp (Java) làm kiểu trả về nhưng bạn không sử dụng câu lệnh return trong khối.

Stick vào đó, nếu bạn không muốn quay trở lại bất cứ điều gì:

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

Void là một đối tượng trong Java và có nghĩa là 'không có gì'.
Trong Kotlin, có nhiều loại chuyên dùng cho 'không có gì':

  • Unit -> thay thế java của void
  • Nothing -> 'một giá trị mà không bao giờ tồn tại'

Bây giờ trong Kotlin bạn có thể tham khảoVoid, giống như bạn có thể tham khảo bất kỳ lớp nào từ Java, nhưng bạn thực sự không nên. Thay vào đó, hãy sử dụng Unit. Ngoài ra, nếu bạn trả lại Unit, bạn có thể bỏ qua nó.

+2

'Void' (mà thực sự là: [ 'java.lang.Void'] (http://docs.oracle. com/javase/8/docs/api/java/lang/Void.html)) không phải là một đối tượng *, đó là một lớp * * trong Java. Bạn không thể tạo các phiên bản của lớp này. – Jesper

Các vấn đề liên quan