Ran*_*ku' 11 class sealed kotlin
如果我使用了文档中的示例,
class SomeActivity : AppCompatActivity() {
sealed class Expr
data class Const(val number: Double) : Expr()
data class Sum(val e1: Expr, val e2: Expr) : Expr()
object NotANumber : Expr()
}
Run Code Online (Sandbox Code Playgroud)
它没有编译,错误:
Cannot access '<init>', it is private in 'Expr'.
Run Code Online (Sandbox Code Playgroud)
但是,将它移到封闭类之外会使其编译:
sealed class Expr
data class Const(val number: Double) : Expr()
data class Sum(val e1: Expr, val e2: Expr) : Expr()
object NotANumber : Expr()
class SomeActivity : AppCompatActivity() {
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?这是预期的行为吗?文档似乎没有提到这一点.
是的,事实证明这是预期的行为.根据允许非嵌套子类的提议:
建议:允许顶级子类用于同一文件中的顶级密封类.
对于非顶级密封类,应在其中声明所有子类.所以,对于这样的类没有任何改变.
您想要的方案列为未解决的问题.在https://youtrack.jetbrains.com/issue/KT-13495上有一张票.目前似乎没有人正在研究它.在对提案的讨论中,开发人员说:
| 归档时间: |
|
| 查看次数: |
3673 次 |
| 最近记录: |