枚举类

在kotlin中,有enum的一个所谓的软关键字,她只在class钱买你才有特殊意义,其他时候都是普通的名称使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
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);
//如果在枚举类中,有定义任何方法的话,需要将定义的常量后面加上分号来与方法分开
fun rgb() = (r * 256 + g) * 256 + b
}

fun main() {
println(Color.RED)
}

结果为

1
2
3
RED

Process finished with exit code 0

//如果没有选择方法或者属性字段,她会默认输出他的名字。

when

一些比较常用的方法

1
2
3
4
5
6
7
8
9
10
11
import Color.*

fun getMnemonic(color: Color) =
when(color){
Color.RED -> "Richard"
//可以在一个分支上合并多个选项
Color.BLUE,Color.ORANGE -> "MyColor"
//导入枚举类常量后,可以直接省略Color
YELLOW -> "Yellow"
else -> throw Exception("Dirty color")
}

when还可以使用任意对象。而且如果when没有传值进入的话,那么他的分支条件就是任意的布尔表达式。
when中也不止以上的内容,她同时也可以完成智能转化,如果要添加日志的话,也可以使用代码体格式,代码块中的最后一个表达式将会成为结果返回

1
2
3
4
5
6
7
8
9
10
11
fun eval(e:Any) =
when(e){
//kotlin中的智能转化,当他用is判断了数据类型后,他会自动转化为该类型然后继续操作
is String -> "这个判断出错了"
is Int -> {
//在使用代码块时,他会将最后一个表达式返回
println("这个判断没出错")
e
}
else -> "这个没有结果"
}

用in来检查是否在某个区间内

1
2
3
4
fun main(){
println("kotlin" in "java".."scale")
println("kotlin" in setOf("java","scale"))
}

他的输出是
这是因为字符串的比较是按照字母表顺序进行比较的