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