真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Kotlin的枚舉與異常示例詳解

一、kotlin中枚舉的定義

成都創(chuàng)新互聯(lián)專注于云浮企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城網(wǎng)站建設(shè)。云浮網(wǎng)站建設(shè)公司,為云浮等地區(qū)提供建站服務(wù)。全流程定制設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

枚舉需要用到兩個(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é)果是一樣的,可以通過(guò)逗號(hào)連接,譬如

//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中可通過(guò)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)椴蹲搅艘矝](méi)法處理。

比如BufferReader.close可能會(huì)拋出IOException異常,但很多程序?qū)@個(gè)異常都不會(huì)采取有意義的行動(dòng),所以對(duì)這個(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í)一種新語(yǔ)言,更是在學(xué)習(xí)改變習(xí)慣思考方式的過(guò)程

和Java對(duì)比,用Kotin給你帶來(lái)不一樣的思考習(xí)慣

  • 熟悉的if現(xiàn)在是帶返回值的表達(dá)式
  • when表達(dá)式類似于Java中的switch但功能更強(qiáng)大
  • for循環(huán)在kotlin中更加方便,尤其是迭代map和迭代集合需要下標(biāo)的時(shí)候
  • Kotlin中通過(guò) ==..== 就可以創(chuàng)建一個(gè)區(qū)間。區(qū)間和數(shù)列允許在for循環(huán)中使用統(tǒng)一的語(yǔ)法和同一套抽象機(jī)制,并且還可以使用 ==in== 和 ==!in== 來(lái)檢查值是否屬于某個(gè)區(qū)間。
  • Kotlin不區(qū)分受檢異常和不受檢異常。拋棄Java中的毫無(wú)意義的重新拋出和忽略異常的代碼。中

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)創(chuàng)新互聯(lián)的支持。


網(wǎng)頁(yè)名稱:Kotlin的枚舉與異常示例詳解
本文網(wǎng)址:http://weahome.cn/article/jcodjs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部