关于Kotlin中的密封课程,哪一个是正确的?

时间:2018-07-12 02:37:13

标签: android kotlin

似乎有两种定义密封类的方法,一种是在代码A和代码B之间正确的?

代码A

sealed class ExprA
data class Const(val number: Double) : ExprA()
data class Sum(val e1: ExprA, val e2: ExprA) : ExprA()

代码B

sealed class ExprB{
    data class Const(val number: Double) : ExprB()
    data class Sum(val e1: ExprB, val e2: ExprB) : ExprB()
}

2 个答案:

答案 0 :(得分:6)

https://kotlinlang.org/docs/reference/sealed-classes.html

  

要声明一个密封的类,可以在该类的名称前放置一个密封的修饰符。密封类可以具有子类,但是所有子类都必须与密封类本身在同一文件中声明。 (在Kotlin 1.1之前,规则更加严格:类必须嵌套在密封类的声明内)。

如果您使用的是 = 1.1

答案 1 :(得分:0)

我不能说我亲自使用了第一种编写密封类的方法,所以我不确定这在语法上是否正确。如果是这样,那的确是代码风格的偏爱。从维护的角度来看,我个人更喜欢第二个,因为它更易于阅读和确保封装在该密封类中。