Kotlin的枚举与异常示例详解
时间:2022-07-27
本文章向大家介绍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中的毫无意义的重新抛出和忽略异常的代码。中
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对ZaLou.Cn的支持。
- [喵咪MQ(3)]RabbitMQ集群安装配置
- 动态实现指定图片半透明及鼠标事件
- JVM杂谈之JIT
- 熔断器 Hystrix 源码解析 —— 执行结果缓存
- [喵咪MQ(2)]RabbitMQ单机模式使用
- [喵咪MQ(1)]RabbitMQ简单介绍准备工作
- Dubbo 源码解析 —— Directory
- [喵咪大数据]Hbase搭建和基本使用
- CSS:模拟Windows窗口及DIV居中
- [喵咪大数据]Hive2搭建和基本操作
- [喵咪大数据]Hadoop节点添加下线和磁盘扩容操作
- [喵咪大数据]Hadoop集群模式
- 【教程】使用TensorFlow对象检测接口标注数据集
- [喵咪大数据]Hadoop单机模式
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- LeetCode61|字符串相加
- LeetCode60|反转字符串
- Python | Flask 解决跨域问题
- 算法 | 斐波那契数列
- 并发学习一、MPI初步认识
- Linux下使用wget下载FTP服务器文件
- 使用Java Api 操作HDFS
- String、StringBuffer 的使用 ,两个面试问题
- Java基础【冒泡、选择排序、二分查找】
- Java基础 【Arrays 类的使用】
- i++ 是线程安全的吗?一脸蒙逼
- Java程序员必备基础:JDK 5-15都有哪些经典新特性
- Java开发中如何自动填充SQL语句中的公共字段
- 打卡群刷题总结0918——乘积最大子数组
- 打卡群刷题总结0919——打家劫舍