关于科特林的封闭式课堂,哪一个是正确的



似乎有两种方法可以定义密封类,代码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()
}

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

要声明一个密封类,请将密封修饰符放在类名之前。密封类可以有子类,但所有子类都必须在与密封类本身相同的文件中声明。(在Kotlin 1.1之前,规则甚至更严格:类必须嵌套在密封类的声明中(。

如果您在<kotlin 1.1,则必须将类嵌套在密封类中;否则,您可以在外部声明它们,但这些类必须在同一个文件中。对于kotlin>=1.1 ,两者都是正确的

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

最新更新