Kotlin 密封類和接口

文章目錄

  • 定義
  • 實例化對象
  • when 分支判定

定義

密封類和接口使用sealed修飾。

密封類和接口與其直接子類只能位于同一包內(一般是同一文件夾中,也可以是不同文件夾,package聲明為同樣的包名):

sealed class Route(val id: String)// 直接子類
class MyRoute(id: String): Route(id)
// 間接子類
class OtherRoute(id: String): MyRoute(id)sealed interface WaterState

實例化對象

可以使用data object聲明密封類或接口的對象(v1.9某個版本之前是用object):

sealed class Route(val id: String) {data object Home: Route("Home")
}sealed interface WaterState {abstract val name: Stringdata object Liquid: WaterState {override val name = "液態"}data object Gaseous: WaterState {override val name = "氣態"}data object Solid: WaterState {override val name = "固態"}
}

不能直接實例化密封類或接口的對象(因為其構造函數的可見性修飾符是protected,并且 Kotlin 限制sealed不能初始化,得用data object繼承的方式創建對象)。

fun main() {// 這是不被允許的// val myRoute = object : Route() {}// val myRoute = Route()
}

如果你一定要這樣做,可以考慮使用類繼承將修飾符改為public

sealed class Route(val id: String) {data object Home: Route("Home")
}class MyRoute(id: String): Route(id)fun main() {print(MyRoute("MyRoute") is Route)
}
true

when 分支判定

when必須將全部情況羅列,并且是對于密封類對象時,如果將全部分支給出,則無需給出else分支(跨平臺項目例外):

sealed class Route(val id: String) {data object Home: Route("Home")
}class MyRoute(id: String): Route(id)// 此時分支必須全部給出,給不全要使用 else 收尾
fun checkRoute(route: Route): String = when(route) {Route.Home -> "Home"is MyRoute -> "MyRoute"
}fun main() {print(checkRoute(MyRoute("Route")))
}
MyRoute

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/20346.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/20346.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/20346.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

雜項——32舵機控制

180度舵機內部有一個基準電路,產生周期為20ms,高電平寬度為1.5ms的基準信號,這個位置其實是舵機轉角的中間位置。通過比較信號線的PWM信號與基準信號,內部的電機控制板得出一個電壓差值,將這個差值加到電機上控制舵機轉…

頭歌頁面置換算法第4關:計算CLOCK算法缺頁率

2 任務:CLOCK算法 2.1 任務描述 設計CLOCK頁面置換算法模擬程序:從鍵盤輸入訪問串。計算CLOCK算法在不同內存頁框數時的缺頁數和缺頁率。要求程序模擬駐留集變化過程,即能模擬頁框裝入與釋放過程。 2.2任務要求 輸入串長度作為總頁框數目,補充程序完成CLOCK算法。 2.3算法思…

[機緣參悟-196] - 《道家-水木然人間清醒1》讀書筆記 -20-主要內容與核心理念

目錄 前言: 一、主要內容 1.1 第一章 真相本質 1. 底層邏輯 2. 人生曲線 3. 價值規律 4. 底層規律 1.2 第二章 認知覺醒 1. 認知要素 2. 幸存者偏差 3. 借假修真 4. 兩套秩序 1.3 第三章 關系界限 1. 內 觀 2. 獨 立 3. 真 愛 1.4 第四章 商業邏輯…

【CPP】雙端隊列簡介(deque)

簡介:雙端隊列(deque) 目錄 1.概述2.特點3.底層原理 1.概述 雙端隊列:是一種順序表和順序表的結合數據結構,不是隊列。 它提供順序表的[]下標訪問和鏈表的中間頭部的較高效率插入刪除操作。 2.特點 順序表的優缺點: 優點&…

linux之docker- image.tar 的導出和導入

一、情況 docker 鏡像有時無法從外網訪問,需要把docker 打包導出到本地,然后以文件的形式,發送給其他人,再然后其他人把docker 鏡像文件導入到自己的服務器本地鏡像倉庫,方可使用。也可把鏡像上傳到公司內網。下面就開…

ython 2.7 環境配置:深度探索與高效實踐

Python 2.7 環境配置:深度探索與高效實踐 在數字化時代的浪潮中,Python作為一種強大而靈活的編程語言,深受開發者們的喜愛。盡管Python 3版本已逐漸成為主流,但Python 2.7依然在某些特定領域和場景中發揮著不可替代的作用。本文將…

Verilog HDL基礎知識(二)

引言:本文繼續介紹Verilog HDL基礎知識,重點介紹賦值語句、阻塞與非阻塞、循環語句、同步與異步、函數與任務語法知識。 1. 賦值語句 在Verilog中,有兩種進行賦值的方法,即連續賦值語句和過程賦值語句(塊&#xff09…

Java數據結構-二叉搜索樹

目錄 1. 概念2. 二叉搜索樹的操作2.1 查找2.2 插入2.3 刪除 3. 全部代碼 1. 概念 二叉搜索樹是特殊的二叉樹,也叫二叉排序樹,它的特點是:每個結點的左子樹上的所有結點的值都小于這個結點的值,右子樹上的所有結點的值都大于這個結點的值,另外所有的左子樹和右子樹也分別為二叉…

詳解 Spark 編程之 RDD 依賴關系

一、依賴與血緣關系 依賴:兩個相鄰 RDD 之間的關系血緣關系:多個連續的 RDD 的依賴由于 RDD 不會保存數據,為了提高容錯性,每個 RDD 都會保存自己的血緣關系,一旦某個轉換過程出現錯誤,可以根據血緣關系重新…

JavaScript實現粒子數字倒計時效果附完整注釋

<!DOCTYPE html> <html lang="en"><head><meta charset

隨身wifi網絡卡頓怎么解決?隨身WiFi哪個牌子的最好用?排名第一名的隨身WiFi!

對于隨身wifi靠不靠譜這個問題&#xff0c;網上一直存在爭議。很多人的隨身wifi網速不穩定&#xff0c;信號看著滿格就是上不了網。關于隨身wifi卡頓到底該怎么解決呢&#xff1f; 1.如果是設備網絡在一個地方上網速度很快&#xff0c;換一個地方網絡就不行了&#xff0c;很可能…

股票買賣II

股票買賣II 時間限制&#xff1a;1秒 內存限制&#xff1a;128M 題目描述 給定一個長度為N的數組&#xff0c;數組中的第i個數字表示一個給定股票在第i天的價格。 設計一個算法來計算你所能獲取的最大利潤。你可以盡可能地完成更多的交易&#xff08;多次買賣一支股票…

解析Java中1000個常用類:Readable類,你學會了嗎?

在 Java 編程中,處理輸入流是一個常見的需求。Java 提供了多種方式來處理輸入流,例如 InputStream、Reader 等類和接口。 而 Readable 接口是 Java 提供的一個簡單而強大的接口,用于表示可讀的字符序列。 本文將詳細介紹 Readable 接口的用途、實現原理、應用場景,并通過…

Linux學習筆記(清晰且清爽)

本文首次發布于個人博客 想要獲得最佳的閱讀體驗&#xff08;無廣告且清爽&#xff09;&#xff0c;請訪問本篇筆記 Linux安裝 關于安裝這里就不過多介紹了&#xff0c;安裝版本是CentOS 7&#xff0c;詳情安裝步驟見下述博客在VMware中安裝CentOS7&#xff08;超詳細的圖文教…

QT之全局忽略編譯警告QMAKE_CXXFLAGS

全局忽略編譯警告QMAKE_CXXFLAGS 這個是Qt中用來給編譯器傳遞開關的&#xff0c;常寫在’pro’文件或’pri’文件中。 將所有的警告當成錯誤處理 QMAKE_CXXFLAGS -Werror return-type //函數有返回值 QMAKE_CXXFLAGS -Werror return-local-addr //返回局部變量地址 QMAKE…

Dubbo架構概覽:服務注冊與發現、遠程調用、監控與管理

Dubbo 是一個成熟的、高性能的、基于 Java 的微服務開發框架&#xff0c;它主要用于解決分布式系統中的服務治理問題&#xff0c;包括服務的注冊與發現、遠程過程調用&#xff08;RPC&#xff09;、服務監控與管理等多個關鍵環節。以下是Dubbo架構概覽的詳細介紹&#xff1a; …

3種使用OpenCV進行圖像合成的技巧

準備好探索圖像世界的魔法了嗎&#xff1f;今天&#xff0c;我們將用Python和OpenCV庫&#xff0c;一起解鎖三種超炫的圖像合成技巧&#xff0c;讓你的照片變得與眾不同&#xff01;&#x1f308; 1. 圖像融合&#xff1a;讓風景與夢境交織 想象一下&#xff0c;把日出的輝煌…

【前端每日基礎】day33——響應式布局

響應式布局是一種網頁設計的方法&#xff0c;它可以使網站在不同的設備上&#xff08;如桌面電腦、平板電腦、手機等&#xff09;以及不同的屏幕尺寸上呈現出最佳的顯示效果。響應式布局的目標是使用戶在任何設備上都能夠方便地訪問和瀏覽網站&#xff0c;而不需要使用不同版本…

ios v品會 api-sign算法

vip品會 api-sign算法還原 ios入門案例 視頻系列 IOS逆向合集-前言嗶哩嗶哩bilibili 一、ios難度與安卓對比 這里直接復制 楊如畫大佬的文章的內容&#xff1a; ios難度與安卓對比 很多人說ios逆向比安卓簡單&#xff0c;有以下幾個原因 1 首先就是閉源&#xff0c;安卓開源…

PH編程入門:從基礎到實踐的全方位解析

PH編程入門&#xff1a;從基礎到實踐的全方位解析 PH編程&#xff0c;作為一種獨特而強大的編程語言&#xff0c;正逐漸在各個領域展現其巨大的潛力。對于初學者來說&#xff0c;如何快速入門并掌握PH編程的精髓&#xff0c;是一個既充滿挑戰又充滿機遇的過程。本文將從四個方…