我对使用sealed
修饰符感到困惑。
它做了什么?
答案 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
。