簡體   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