Kotlin的枚举与异常示例详解

 更新时间:2019年07月28日 16:15:41   作者:树獭非懒  
这篇文章主要给大家介绍了关于Kotlin的枚举与异常的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Kotlin具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

一、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中的毫无意义的重新抛出和忽略异常的代码。中

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

相关文章

  • Android实现顶部底部双导航界面功能

    Android实现顶部底部双导航界面功能

    这篇文章主要为大家详细介绍了Android实现顶部\底部双导航界面功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Android实现疯狂连连看游戏之开发游戏界面(二)

    Android实现疯狂连连看游戏之开发游戏界面(二)

    这篇文章主要为大家详细介绍了Android实现疯狂连连看游戏之开发游戏界面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Android颜色编辑器的制作中遇到的问题分析

    Android颜色编辑器的制作中遇到的问题分析

    Android没有自带颜色编辑器,为了让用户直观的选择颜色,做了这么一个控件
    2012-11-11
  • Android json解析及简单例子

    Android json解析及简单例子

    这篇文章主要为大家详细介绍了Android json解析及简单例子,具有一定的参考价值,感兴趣的朋友可以参考一下
    2016-06-06
  • Android中通过反射实现圆角ImageView代码实例

    Android中通过反射实现圆角ImageView代码实例

    这篇文章主要介绍了Android中通过反射实现圆角ImageView代码实例,本文直接给出核心实现代码,需要的朋友可以参考下
    2015-04-04
  • 图文讲解Android的ImageView类中的ScaleType属性设置

    图文讲解Android的ImageView类中的ScaleType属性设置

    这篇文章主要介绍了Android的ImageView类中的ScaleType属性设置,同时文中还讲了实现图片宽度100%ImageView宽度且高度按比例自动伸缩的方法,需要的朋友可以参考下
    2016-03-03
  • flutter实现倒计时加载页面

    flutter实现倒计时加载页面

    这篇文章主要为大家详细介绍了flutter实现倒计时加载页面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • android textview 显示html方法解析

    android textview 显示html方法解析

    现在网络的繁盛时代,光文字是不能满足人们的胃口的,图片,flash,音频,视频就成为浏览网页的主流显示,在手机上也一样,本文将详细介绍此功能的实现方法
    2012-11-11
  • 详解Kotlin协程的异常处理机制

    详解Kotlin协程的异常处理机制

    协程会遇到各种异常情况,比如协程被取消、协程内部发生错误、协程之间的异常传播等,这些异常情况需要我们正确地处理,否则可能会导致程序崩溃、资源泄露或者逻辑错误,本文将介绍 Kotlin 协程的异常处理机制,需要的朋友可以参考下
    2023-09-09
  • android 6.0下webview的定位权限设置方法

    android 6.0下webview的定位权限设置方法

    今天小编就为大家分享一篇android 6.0下webview的定位权限设置方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07

最新评论