前言
public enum Color
{
RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET
}enum class Color {
RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET
}public enum Color
{
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);
private int r;
private int g;
private int b;
Color(int r, int g, int b)
{
this.r = r;
this.g = g;
this.b = b;
}
public int getRGB(){
return (r * 256 + g * 256 + b*256);
}
public int getR()
{
return r;
}
public int getG()
{
return g;
}
public int getB()
{
return b;
}
}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 * 256 + g * 256 + b*256)//定义枚举的方法
}fun getMnemonic(color: Color) = //直接返回一个“when”的表达式
when (color) { //如果颜色等于枚举常量,返回响应的字符串
Color.RED -> "Richard"
Color.ORANGE -> "Of"
Color.YELLOW -> "York"
Color.GREEN -> "Gave"
Color.BLUE -> "Battle"
Color.INDIGO -> "In"
Color.VIOLET -> "Vain"
}
println(getMnemonic(Color.BLUE)) // Battlefun getWarmth(color: Color) = when(color) {
Color.RED, Color.ORANGE, Color.YELLOW -> "warm"
Color.GREEN -> "neutral"
Color.BLUE, Color.INDIGO, Color.VIOLET -> "cold"
}
println(getWarmth(Color.ORANGE)) //warmimport ch02.colors.Color //导入声明在另外一个包的Color类
import ch02.colors.Color.*//用名字显示导入枚举常量
fun getWarmth(color: Color) = when(color) {
RED, ORANGE, YELLOW -> "warm" //用名字导入常量
GREEN -> "neutral"
BLUE, INDIGO, VIOLET -> "cold"
}fun mix(c1: Color, c2: Color) =
when (setOf(c1, c2)) {//when表达式的参数可以是任何实例,用来被分支条件检查
setOf(RED, YELLOW) -> ORANGE//枚举可以混合的颜色对
setOf(YELLOW, BLUE) -> GREEN
setOf(BLUE, VIOLET) -> INDIGO
else -> throw Exception("Dirty color")//执行这个,如果没有分支可以匹配
}
println(mix(BLUE, YELLOW))//GREENfun mixOptimized(c1: Color, c2: Color) =
//没有实参传给when
when {
(c1 == RED && c2 == YELLOW) || (c1 == YELLOW && c2 == RED) -> ORANGE
(c1 == YELLOW && c2 == BLUE) || (c1 == BLUE && c2 == YELLOW) -> GREEN
(c1 == BLUE && c2 == VIOLET) || (c1 == VIOLET && c2 == BLUE) -> INDIGO
else -> throw Exception("Dirty color")
}
println(mixOptimized(BLUE, YELLOW)) //GREENfun evalWithLogging(e: Expr): Int =
when (e) {
is Num -> {
println("num: ${e.value}")
e.value //如果e是Num类型,这是代码块最后一个表达式,并被返回
}
is Sum -> {
val left = evalWithLogging(e.left)
val right = evalWithLogging(e.right)
println("sum: $left + $right")
left + right//如果表达式被返回当e是Sum类型
}
else -> throw IllegalArgumentException("Unknown expression")
}
println(evalWithLogging(Sum(Sum(Num(1), Num(2)), Num(4))))
//num: 1
//num: 2
//sum: 1 + 2
//num: 4
//sum: 3 + 4
//7