Kotlin的枚举与异常示例详解

前端之家收集整理的这篇文章主要介绍了Kotlin的枚举与异常示例详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、kotlin中枚举的定义

枚举需要用到两个关键字 enum class,譬如这样

  1. enum class Color(val r: Int,val g: Int,val b: Int){
  2. //彩虹色也是一个典故:韦克菲尔德战役
  3. RED(255,0),ORANGE(255,165,YELLOW(255,255,GREEN(0,BLUE(0,255),INDIGO(75,130),VIOLET(238,130,238);
  4.  
  5. fun rgb() = (r * 255 + g) * 256 + b
  6. }

调用枚举中的rgb函数

  1. fun main() {
  2. println("RED's RGB value is ${Color.RED.rgb()}")

二、枚举和when的结合

初步使用

  1. //枚举和when的配合使用
  2. fun getMnemonic(color: Color): String{
  3.  
  4. //when配合枚举使用
  5. return when(color){
  6. Color.RED -> "Richard"
  7. Color.ORANGE -> "Of"
  8. Color.YELLOW -> "York"
  9. Color.GREEN -> "Gave"
  10. Color.BLUE -> "Battle"
  11. Color.INDIGO -> "In"
  12. Color.VIOLET -> "Vain!"
  13. }
  14. }

如果多个case的结果是一样的,可以通过逗号连接,譬如

  1. //when的多个case同一个结果的方式
  2. fun getWarmth(color: Color) = when(color){
  3. Color.RED,Color.ORANGE,Color.YELLOW -> "warm"
  4. Color.GREEN -> "neutral"
  5. Color.BLUE,Color.INDIGO,Color.VIOLET -> "cold"
  6. }

遇到有case之外其他情况,使用else。用when代替if

  1. fun mix(c1: Color,c2: Color) =
  2. when(setOf(c1,c2)){
  3. setOf(Color.RED,Color.YELLOW) -> Color.ORANGE
  4. else -> throw Exception("Dirty Color")
  5. }

使用不带参数的when

  1. fun mixOptimized(c1: Color,c2: Color) =
  2. when{
  3. (c1 == Color.RED&& c2 == Color.YELLOW ||
  4. c2 == Color.RED&& c1 == Color.YELLOW) -> Color.ORANGE
  5. else -> throw Exception("Dirty Color")
  6. }

setOf是将元素加入到Set集合中

when中可通过is判断类型

  1. fun eval(e: Expr): Int =
  2. when(e){
  3. is Num -> e.value
  4. is Sum -> eval(e.right) + eval(e.left)
  5. else -> throw IllegalArgumentException("Unknown expression")
  6. }

when中使用in检查范围

  1. fun recognize(c: Char) = when(c){
  2. in '0'..'9' -> "It's a digit!"
  3. in 'a'..'z',in 'A'..'Z' -> "It's a letter"
  4. else -> "I don't know what it is."
  5. }

三、Kotlin中的异常

kotlin中不区分受检异常和

Java中的异常: 受检异常,这种异常必须显式的处理
Kotlin中的异常:不区分受检异常和未受检异常。不用指定函数抛出的异常,而且可以处理也可以不处理异常。

受检异常有个弊端就是:很多时候的异常我们是不需要捕捉的,因为捕捉了也没法处理。

比如BufferReader.close可能会抛出IOException异常,但很多程序对这个异常都不会采取有意义的行动,所以对这个异常的捕获所写的代码就是冗余的代码

当然,它的使用和Java基本一样,try-catch或try-catch-finally块

  1. //将读取到的字符串类型转化成Int类型
  2. fun readNumber(reader: BufferedReader): Int?{
  3. try {
  4. val line = reader.readLine()
  5. return Integer.parseInt(line)
  6. }catch (e: NumberFormatException){
  7. return null
  8. }finally {
  9. reader.close()
  10. }
  11. }

其实Kotin中的try关键字也是表达式,所以也可以这么写:

  1. fun readNumber2(reader: BufferedReader){
  2. val number = try {
  3. val line = reader.readLine()
  4. Integer.parseInt(line)
  5. }catch (e: NumberFormatException) {
  6. return
  7. }
  8. println(number)
  9. }

总结

学习Kotlin不仅仅是在学习一种新语言,更是在学习改变习惯思考方式的过程

和Java对比,用Kotin给你带来不一样的思考习惯

  • 熟悉的if现在是带返回值的表达式
  • when表达式类似于Java中的switch但功能更强大
  • for循环在kotlin中更加方便,尤其是迭代map和迭代集合需要下标的时候
  • Kotlin中通过 ==..== 就可以创建一个区间。区间和数列允许在for循环中使用统一的语法和同一套抽象机制,并且还可以使用 ==in== 和 ==!in== 来检查值是否属于某个区间。
  • Kotlin不区分受检异常和不受检异常。抛弃Java中的毫无意义的重新抛出和忽略异常的代码。中

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持

猜你在找的Android相关文章