![](/img/trans.png)
[英]Kotlin sealed class - how to sort by sealed class similar to sorting by enum
[英]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 的所有子代。 例如, HomeScreen
和LoginScreen
:
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.