Kotlin 声明继承和初始化的对象

Kotlin 声明继承和初始化的对象,kotlin,Kotlin,我看到了这个Kotlin代码: sealed class BookingState { object ReasonOfTravel : BookingState() } 在Kotlin文档中,我看到了声明对象的示例: 但我看不到任何没有花括号的声明。在上面的代码示例中,ReasonOfTravel继承自BookingState,但后面没有大括号。当对象由BookingState初始化时,是否仅当您希望运行某些代码时才需要大括号 是否仅当您希望在 对象是否由BookingState初始化

我看到了这个Kotlin代码:

sealed class BookingState {
    object ReasonOfTravel : BookingState()
}
在Kotlin文档中,我看到了声明对象的示例:

但我看不到任何没有花括号的声明。在上面的代码示例中,ReasonOfTravel继承自BookingState,但后面没有大括号。当对象由BookingState初始化时,是否仅当您希望运行某些代码时才需要大括号

是否仅当您希望在 对象是否由BookingState初始化

这是正确的。您还可以对类和数据类执行完全相同的操作

这是Kotlin中的一个有效类,并已成功遵守

class Example
对于数据类,大多数时候我们没有在其下执行的代码,因此我们也不使用大括号

data class Example(val foo: String)
是否仅当您希望在 对象是否由BookingState初始化

这是正确的。您还可以对类和数据类执行完全相同的操作

这是Kotlin中的一个有效类,并已成功遵守

class Example
对于数据类,大多数时候我们没有在其下执行的代码,因此我们也不使用大括号

data class Example(val foo: String)
在您的例子中,对象仅用作标记,没有任何特定行为。稍后,您可以检查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 block

在您的情况下,对象仅用作标记,没有任何特定行为。稍后,您可以检查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 block