Kotlin的枚舉與異常示例詳解
一、kotlin中枚舉的定義
枚舉需要用到兩個(gè)關(guān)鍵字 enum class,譬如這樣
enum class Color(val r: Int,val g: Int,val b: Int){ //彩虹色也是一個(gè)典故:韋克菲爾德戰(zhàn)役 RED(255,0,0),ORANGE(255,165,0),YELLOW(255,255,0), GREEN(0,255,0),BLUE(0,0,255),INDIGO(75,0,130),VIOLET(238,130,238); fun rgb() = (r * 255 + g) * 256 + b }
調(diào)用枚舉中的rgb函數(shù)
fun main() { println("RED's RGB value is ${Color.RED.rgb()}")
二、枚舉和when的結(jié)合
初步使用
//枚舉和when的配合使用 fun getMnemonic(color: Color): String{ //when配合枚舉使用 return when(color){ Color.RED -> "Richard" Color.ORANGE -> "Of" Color.YELLOW -> "York" Color.GREEN -> "Gave" Color.BLUE -> "Battle" Color.INDIGO -> "In" Color.VIOLET -> "Vain!" } }
如果多個(gè)case的結(jié)果是一樣的,可以通過逗號連接,譬如
//when的多個(gè)case同一個(gè)結(jié)果的方式 fun getWarmth(color: Color) = when(color){ Color.RED,Color.ORANGE,Color.YELLOW -> "warm" Color.GREEN -> "neutral" Color.BLUE,Color.INDIGO,Color.VIOLET -> "cold" }
遇到有case之外其他情況,使用else。用when代替if
fun mix(c1: Color,c2: Color) = when(setOf(c1,c2)){ setOf(Color.RED,Color.YELLOW) -> Color.ORANGE else -> throw Exception("Dirty Color") }
使用不帶參數(shù)的when
fun mixOptimized(c1: Color,c2: Color) = when{ (c1 == Color.RED&& c2 == Color.YELLOW || c2 == Color.RED&& c1 == Color.YELLOW) -> Color.ORANGE else -> throw Exception("Dirty Color") }
setOf是將元素加入到Set集合中
when中可通過is判斷類型
fun eval(e: Expr): Int = when(e){ is Num -> e.value is Sum -> eval(e.right) + eval(e.left) else -> throw IllegalArgumentException("Unknown expression") }
when中使用in檢查范圍
fun recognize(c: Char) = when(c){ in '0'..'9' -> "It's a digit!" in 'a'..'z',in 'A'..'Z' -> "It's a letter" else -> "I don't know what it is." }
三、Kotlin中的異常
kotlin中不區(qū)分受檢異常和
Java中的異常: 受檢異常,這種異常必須顯式的處理
Kotlin中的異常:不區(qū)分受檢異常和未受檢異常。不用指定函數(shù)拋出的異常,而且可以處理也可以不處理異常。
受檢異常有個(gè)弊端就是:很多時(shí)候的異常我們是不需要捕捉的,因?yàn)椴蹲搅艘矝]法處理。
比如BufferReader.close可能會拋出IOException異常,但很多程序?qū)@個(gè)異常都不會采取有意義的行動(dòng),所以對這個(gè)異常的捕獲所寫的代碼就是冗余的代碼
當(dāng)然,它的使用和Java基本一樣,try-catch或try-catch-finally塊
//將讀取到的字符串類型轉(zhuǎn)化成Int類型 fun readNumber(reader: BufferedReader): Int?{ try { val line = reader.readLine() return Integer.parseInt(line) }catch (e: NumberFormatException){ return null }finally { reader.close() } }
其實(shí)Kotin中的try關(guān)鍵字也是表達(dá)式,所以也可以這么寫:
fun readNumber2(reader: BufferedReader){ val number = try { val line = reader.readLine() Integer.parseInt(line) }catch (e: NumberFormatException) { return } println(number) }
總結(jié)
學(xué)習(xí)Kotlin不僅僅是在學(xué)習(xí)一種新語言,更是在學(xué)習(xí)改變習(xí)慣思考方式的過程
和Java對比,用Kotin給你帶來不一樣的思考習(xí)慣
- 熟悉的if現(xiàn)在是帶返回值的表達(dá)式
- when表達(dá)式類似于Java中的switch但功能更強(qiáng)大
- for循環(huán)在kotlin中更加方便,尤其是迭代map和迭代集合需要下標(biāo)的時(shí)候
- Kotlin中通過 ==..== 就可以創(chuàng)建一個(gè)區(qū)間。區(qū)間和數(shù)列允許在for循環(huán)中使用統(tǒng)一的語法和同一套抽象機(jī)制,并且還可以使用 ==in== 和 ==!in== 來檢查值是否屬于某個(gè)區(qū)間。
- Kotlin不區(qū)分受檢異常和不受檢異常。拋棄Java中的毫無意義的重新拋出和忽略異常的代碼。中
好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。
相關(guān)文章
Android?RecyclerChart其它圖表繪制示例詳解
這篇文章主要為大家介紹了Android?RecyclerChart其它圖表繪制示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12Android ViewPager導(dǎo)航小圓點(diǎn)實(shí)現(xiàn)無限循環(huán)效果
這篇文章主要為大家詳細(xì)介紹了Android ViewPager導(dǎo)航小圓點(diǎn)實(shí)現(xiàn)無限循環(huán)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08簡單了解Android性能優(yōu)化方向及相關(guān)工具
這篇文章主要介紹了簡單了解Android性能優(yōu)化方向及相關(guān)工具,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08Android實(shí)現(xiàn)顯示系統(tǒng)實(shí)時(shí)時(shí)間
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)顯示系統(tǒng)實(shí)時(shí)時(shí)間,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05Android調(diào)用系統(tǒng)攝像頭拍照并顯示在ImageView上
這篇文章主要為大家詳細(xì)介紹了Android調(diào)用系統(tǒng)攝像頭拍照并顯示在ImageView上,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04Android完美實(shí)現(xiàn)平滑過渡的ViewPager廣告條
這篇文章主要為大家詳細(xì)介紹了Android完美實(shí)現(xiàn)平滑過渡的ViewPager廣告條,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11Android自定義ViewGroup實(shí)現(xiàn)帶箭頭的圓角矩形菜單
這篇文章主要為大家詳細(xì)介紹了Android自定義ViewGroup帶箭頭的圓角矩形菜單實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07