密封修饰剂在Kotlin中代表什么?

时间:2017-06-15 13:37:21

标签: kotlin sealed

我对使用sealed修饰符感到困惑。

它做了什么?

3 个答案:

答案 0 :(得分:6)

official docs涵盖了此内容。

密封类具有受限制的继承层次结构:只有在它们内部声明的类或与它们在同一文件中的类(因为Kotlin 1.1)可以是密封类的子类。

当与when表达式结合使用时,这可能很有用,这可以保证它们的分支完整地检查密封类的可能子类。

答案 1 :(得分:3)

当您想要限制创建子类的可能性时,主要使用此修饰符,这意味着应该嵌套所有直接子类,这是一个示例:

sealed class Animal {
    class Cow(val name: String) : Animal()
}

//It generates a compilation error
class Horse : Animal() {
}

因此,sealed类不能在类外部拥有继承者。

答案 2 :(得分:2)

其他答案都很好,但重要的一点是我认为值得补充:扩展密封类的子类的类可以放在任何地方,不一定放在同一个文件中。这一点非常重要,因为密封类并不一定意味着整个继承层次结构将在同一个文件中,除非每个子类都是sealed

您可以在the official docs for sealed classes.

中详细了解相关信息