给自己看系列:用了这么久
kotlin才发现when表达式是可以不带参数的
代码
enum class Color(val r:Int,val g:Int,val b:Int){
BLACK(0,0,0),
RED(255,0,0),
GREEN(0,255,0),
BLUE(0,0,255);
companion object{
fun mixOptimized(c1: Color,c2: Color): Color = when{
(c1 == BLACK && c2 == BLUE) || (c1 == BLACK && c2 == RED) -> BLACK
(c1 == BLUE && c2 == BLACK) || (c1 == BLUE && c2 == RED) -> BLUE
(c1 == RED && c2 == BLACK) || (c1 == RED && c2 == BLUE) -> RED
else -> {
throw Exception("unknow the color")
}
}
}
}
fun main() {
println(Color.mixOptimized(Color.BLACK,Color.RED))
}
// 打印结果
// BLACK
这种书写方式,优点是可以避免创建额外的垃圾对象,缺点是可能会使代码的可读性变差,但这是为了达到更好的性能必须付出的代价。