柚子快報邀請碼778899分享:Kotlin 密封類與接口
密封的類和接口表示受限制的類層次結(jié)構(gòu),這些層次結(jié)構(gòu)提供了對繼承的更多控制;在定義密封類的模塊和包之外,不能出現(xiàn)其他子類;密封類的每個實例都有一個來自有限集的類型,該類型在編譯此類時是已知的;一旦編譯了具有密封接口的模塊,就不會出現(xiàn)新的實現(xiàn)
密封類類似于枚舉類:枚舉類型的值集也受到限制,但每個枚舉常量僅作為一個實例存在,而密封類的子類可以有多個實例,每個實例都有自己的狀態(tài)
使用 sealed?聲明密封的類或接口
sealed interface Error
sealed class IOError(): Error
class FileReadError(val file: File): IOError()
class DatabaseError(val source: DataSource): IOError()
object RuntimeError : Error
使用密封類的關(guān)鍵好處在于使用?when?表達式的時候;如果能夠驗證語句覆蓋了所有情況,就不需要為該語句再添加一個?else?子句
fun log(e: Error) = when(e) {
is FileReadError -> { println("Error while reading file ${e.file}") }
is DatabaseError -> { println("Error while reading from database ${e.source}") }
is RuntimeError -> { println("Runtime error") }
// 不再需要 `else` 子句,因為已經(jīng)覆蓋了所有的情況
}
柚子快報邀請碼778899分享:Kotlin 密封類與接口
精彩內(nèi)容
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。