繁体   English   中英

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

[英]Which one is correct about sealed class in Kotlin?

似乎有两种方法来定义密封类,哪种方法在Code A和CodeB之间是正确的?

代码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

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

暂无
暂无

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

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