中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Kotlin的枚舉與異常示例詳解

發布時間:2020-09-25 22:45:52 來源:腳本之家 閱讀:145 作者:樹獺非懶 欄目:移動開發

一、kotlin中枚舉的定義

枚舉需要用到兩個關鍵字 enum class,譬如這樣

enum class Color(val r: Int,val g: Int,val b: Int){
 //彩虹色也是一個典故:韋克菲爾德戰役
 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函數

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")
 }

使用不帶參數的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中不區分受檢異常和

Java中的異常: 受檢異常,這種異常必須顯式的處理
Kotlin中的異常:不區分受檢異常和未受檢異常。不用指定函數拋出的異常,而且可以處理也可以不處理異常。

受檢異常有個弊端就是:很多時候的異常我們是不需要捕捉的,因為捕捉了也沒法處理。

比如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現在是帶返回值的表達式
  • when表達式類似于Java中的switch但功能更強大
  • for循環在kotlin中更加方便,尤其是迭代map和迭代集合需要下標的時候
  • Kotlin中通過 ==..== 就可以創建一個區間。區間和數列允許在for循環中使用統一的語法和同一套抽象機制,并且還可以使用 ==in== 和 ==!in== 來檢查值是否屬于某個區間。
  • Kotlin不區分受檢異常和不受檢異常。拋棄Java中的毫無意義的重新拋出和忽略異常的代碼。中

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乳源| 龙里县| 赞皇县| 香港| 万安县| 淳安县| 慈利县| 奉节县| 安顺市| 旬阳县| 同心县| 贺兰县| 汉源县| 天全县| 北流市| 五河县| 临汾市| 云林县| 新邵县| 绥棱县| 威信县| 讷河市| 南郑县| 绍兴市| 科尔| 峡江县| 镇原县| 揭东县| 通榆县| 沧州市| 通许县| 宜川县| 宁河县| 溧水县| 横峰县| 正安县| 井陉县| 兰坪| 中阳县| 鹤山市| 龙岩市|