繁体   English   中英

如何在 Kotlin 中编写密封的 class

[英]How to write sealed class in Kotlin

sealed class DestinationScreen(val route:String){
    object Signup: DestinationScreen(route = "signup")
}

现在我正在开发上面的导航屏幕。 我不明白这个说法。

object Signup: DestinationScreen(route = "signup")

我认为注册是财产。 所以要设置它,我们应该在下面写这个吗?

object Signup = DestinationScreen(route = "signup")

为什么不使用=发出实例并设置 Signup 属性?

请教我。 谢谢你。

没有。 Signup不是财产。 It's basically a class which extends DestinationScreen except it's a special class object which acts as a singleton and is initiated at the same point it's described. 这就是你这样写的原因。

为什么它看起来像你的属性是你碰巧在另一个 class 中声明它(这使它成为一个内部类)。 但是您也可以在 class 之外声明它。

更多关于 Kotlin 对象https://kotlinlang.org/docs/object-declarations.html

密封类表示具有固定数量子类的 class。 首先,您声明父 class,例如,描述应用程序Screen的 class。 然后,您声明此 class 的所有子代。 例如, HomeScreenLoginScreen

sealed class Screen

class HomeScreen : Screen()
class LoginScreen : Screen()

所有子类都可以在父 class 之外编写(但由于编译器限制,必须位于同一文件中)。

如果 class 没有属性,您可以使用object关键字代替class修饰符。 这意味着 object 关键字声明了singleton class。

因为您使用的是 inheritance,而不是分配。

密封的 class 是 class 编译器已知其子类型,因此它允许您按类型创建流控制:

sealed class Result {
     data class Success(val data...): Result()
     data class Error(val exception...): Result()
}

所以你可以这样做:

when(val result = ...) {
    is Success -> result.data
    is Error -> result.error
}

与普通的 inheritance 一样,在接口、开放类或抽象类上,您不知道类型化的 thar 从超类型继承。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM