Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
密封修饰符在Kotlin中代表什么?_Kotlin_Sealed - Fatal编程技术网

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

密封修饰符在Kotlin中代表什么?,kotlin,sealed,Kotlin,Sealed,我对密封修改器的使用有点困惑 它做什么?此修饰符主要用于限制创建子类的可能性,它意味着所有直接子类都应嵌套,例如: sealed class Animal { class Cow(val name: String) : Animal() } //It generates a compilation error class Horse : Animal() { } 因此,密封类不能在类外具有继承器。本章将对此进行说明 密封类具有受限的继承层次结构:只有在它们内部声明的类或与它们位于同一

我对密封修改器的使用有点困惑


它做什么?

此修饰符主要用于限制创建子类的可能性,它意味着所有直接子类都应嵌套,例如:

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

//It generates a compilation error
class Horse : Animal() {
}
因此,密封类不能在类外具有继承器。

本章将对此进行说明

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


这在与when表达式结合使用时非常有用,它可以保证它们的分支彻底检查密封类的可能子类。

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


您可以在

Try中了解更多信息-sealed关键字,就类而言,确保类的所有子类都在同一文件中并与超类嵌套。文档中有什么不清楚的地方?这不是完全正确的:Kotlin 1.1取消了限制,现在子类可以位于sealed类之外,但是应该放在同一个文件中。此外,值得一提的是,此限制的好处是:编译器可以检查when语句的分支中是否列出了所有子类型,因此不需要else分支。在>=1.1 REPL中,子类仍必须嵌套在内部