Kotlin的枚舉與異常示例詳解
一、kotlin中枚舉的定義
枚舉需要用到兩個關鍵字 enum class,譬如這樣
enum class Color(val r: Int,val g: Int,val b: Int){
//彩虹色也是一個典故:韋克菲爾德戰(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
}
調用枚舉中的rgb函數(shù)
fun main() {
println("RED's RGB value is ${Color.RED.rgb()}")
二、枚舉和when的結合
初步使用
//枚舉和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!"
}
}
如果多個case的結果是一樣的,可以通過逗號連接,譬如
//when的多個case同一個結果的方式
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ù)拋出的異常,而且可以處理也可以不處理異常。
受檢異常有個弊端就是:很多時候的異常我們是不需要捕捉的,因為捕捉了也沒法處理。
比如BufferReader.close可能會拋出IOException異常,但很多程序對這個異常都不會采取有意義的行動,所以對這個異常的捕獲所寫的代碼就是冗余的代碼
當然,它的使用和Java基本一樣,try-catch或try-catch-finally塊
//將讀取到的字符串類型轉化成Int類型
fun readNumber(reader: BufferedReader): Int?{
try {
val line = reader.readLine()
return Integer.parseInt(line)
}catch (e: NumberFormatException){
return null
}finally {
reader.close()
}
}
其實Kotin中的try關鍵字也是表達式,所以也可以這么寫:
fun readNumber2(reader: BufferedReader){
val number = try {
val line = reader.readLine()
Integer.parseInt(line)
}catch (e: NumberFormatException) {
return
}
println(number)
}
總結
學習Kotlin不僅僅是在學習一種新語言,更是在學習改變習慣思考方式的過程
和Java對比,用Kotin給你帶來不一樣的思考習慣
- 熟悉的if現(xiàn)在是帶返回值的表達式
- when表達式類似于Java中的switch但功能更強大
- for循環(huán)在kotlin中更加方便,尤其是迭代map和迭代集合需要下標的時候
- Kotlin中通過 ==..== 就可以創(chuàng)建一個區(qū)間。區(qū)間和數(shù)列允許在for循環(huán)中使用統(tǒng)一的語法和同一套抽象機制,并且還可以使用 ==in== 和 ==!in== 來檢查值是否屬于某個區(qū)間。
- Kotlin不區(qū)分受檢異常和不受檢異常。拋棄Java中的毫無意義的重新拋出和忽略異常的代碼。中
好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。
相關文章
Android實現(xiàn)瘋狂連連看游戲之開發(fā)游戲界面(二)
這篇文章主要為大家詳細介紹了Android實現(xiàn)瘋狂連連看游戲之開發(fā)游戲界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03
Android中通過反射實現(xiàn)圓角ImageView代碼實例
這篇文章主要介紹了Android中通過反射實現(xiàn)圓角ImageView代碼實例,本文直接給出核心實現(xiàn)代碼,需要的朋友可以參考下2015-04-04
圖文講解Android的ImageView類中的ScaleType屬性設置
這篇文章主要介紹了Android的ImageView類中的ScaleType屬性設置,同時文中還講了實現(xiàn)圖片寬度100%ImageView寬度且高度按比例自動伸縮的方法,需要的朋友可以參考下2016-03-03

