繁体   English   中英

为什么我不能声明作为密封 class 子类的嵌套 class?

[英]Why can't I declare a nested class that is a subclass of a sealed class?

Kotlin 文档指出:

密封的 class 可以有子类,但所有子类都必须在与密封的 class 本身相同的文件中声明。 (在 Kotlin 1.1 之前,规则更加严格:类必须嵌套在密封类的声明中)。

诚然,这是一个必要但不充分的条件,但它确实暗示(没有任何相反的东西)我可以在同一个文件的任何地方声明一个密封的 class 的子类。

鉴于以下代码编译:

//class Jungle {
    sealed class Animal
    class Tiger : Animal()
//}

为什么以下内容无法编译:

class Jungle {
    sealed class Animal
    class Tiger : Animal()
}

第二个片段给出了 Intellij Kotlin 插件版本1.3.72-release-IJ2020.1-5的以下错误:

Error:(3, 20) Kotlin: Cannot access '<init>': it is private in 'Animal'
Error:(3, 20) Kotlin: This type is sealed, so it can be inherited by only its own nested classes or objects

事实上,这里的第二条错误信息似乎与文档直接矛盾。

它有一个未解决的问题,它还指出了误导性的诊断信息。 但似乎围绕它的谈话消失了。

Also, this Sealed class inheritance proposal from 4 years ago leaves the matter of sub-classing a nested sealed class by a class on the same level as an open question

暂无
暂无

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

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