我看过这个Kotlin代码:
sealed class BookingState {
object ReasonOfTravel : BookingState()
}
在Kotlin文档中,我看到了声明对象的示例:
https://kotlinlang.org/docs/reference/object-declarations.html
但是我看不到没有花括号的声明。在上面的代码示例中,ReasonOfTravel继承自BookingState,但之后没有大括号。仅在您要通过BookingState()初始化对象时运行一些代码时才需要花括号吗?
最佳答案
就您而言,object
仅用作标记,没有任何特定行为。稍后,您可以检查BookingState
实例并执行以下操作:
sealed class BookingState {
object ReasonOfTravel : BookingState()
object ReasonOfTravel2 : BookingState()
object ReasonOfTravel3 : BookingState()
}
fun test(bookingState: BookingState) = when(bookingState) {
BookingState.ReasonOfTravel -> println("1")
BookingState.ReasonOfTravel2 -> println("2")
BookingState.ReasonOfTravel3 -> println("3")
}
您可以随时使用花括号添加特定行为:
sealed class BookingState {
object ReasonOfTravel : BookingState() {
fun printMe() = println("test")
}
object ReasonOfTravel2 : BookingState()
object ReasonOfTravel3 : BookingState()
}
fun test(bookingState: BookingState) = when (bookingState) {
is BookingState.ReasonOfTravel -> bookingState.printMe()
BookingState.ReasonOfTravel2 -> println("2")
BookingState.ReasonOfTravel3 -> println("3")
}
花括号中的代码无法在对象初始化时运行。您必须使用
init
块
关于kotlin - 声明一个继承并初始化的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57790760/