Android-Kotlin-when&类型推断

时间:2020-11-28 16:47:41

Kotlin的when表达式

TextEngine 描述文字处理对象:

package cn.kotlin.kotlin_base02

/**
* 描述文字处理对象
*
* val textContent 传入进来的文字内容 val是常量
*/
class TextEngine(val textContent: String) { /**
* 处理文字,然后返回
* 返回完整的字符串
*/
fun getDoTextAction() : String {
return """
我来到一个非常美丽的公园,走着走着,就看到了${textContent}这个牌坊,这个牌坊中的${getTextContentCount(textContent)}个字是用漂亮的笔画写的
"""
} /**
* 把存入进来的textContent,转换成几个字
* 返回字符串
*/
private fun getTextContentCount(textContent: String): String {
var result = when(textContent.length) {
1 -> "一"
2 -> "二"
3 -> "三"
4 -> "四"
5 -> "五"
6 -> "六"
else -> {
"" + textContent.length
}
}
return result
} }

main测试方法:

package cn.kotlin.kotlin_base02

fun main(args: Array<String>) {

    var textEngine = TextEngine("皇后工天下")
println(textEngine.getDoTextAction()) var textEngine2 = TextEngine("风云帝王")
println(textEngine2.getDoTextAction()) var textEngine3 = TextEngine("阿巴黎大会公园")
println(textEngine3.getDoTextAction()) println("------------------------------------------------------") // -------------- when 的第一种用法
when(130.88) {
143.98 -> println("体重比较合格...")
130.88 -> println("体重中规中矩....")
100.32 -> println("体重轻了,太瘦了...")
else -> println("体重数据未知...")
} println("------------------------------------------------------") // -------------- when 的第二种用法
when(3) {
1 -> {
println("我有三个人在给我干活....")
}
2 -> {
println("我看到2个人在看电影...")
}
3 -> {
println("三人行必有我吸烟....")
}
else -> println("没有人给我干活...")
} println("------------------------------------------------------") // -------------- when 的第三种用法
var perosnCount = 30
var whenResult = when(perosnCount) {
10 -> "这个工作室${perosnCount}个人"
20 -> "这个工作室${perosnCount}个人"
30 -> "这个工作室${perosnCount}个人"
40 -> "这个工作室${perosnCount}个人"
else -> "这个工作室 N个人在努力工作...."
}
println(whenResult) // when还有其他用法,暂未发现
// ....
}

执行结果:

Android-Kotlin-when&类型推断




类型推断

类型推断是Kotlin内部自动处理的:

类型推断(注意:类型推断 变量和常量是一样的,只要是第一次赋值,就内部就认为第一次的类型变量类型)

定义一个常量/变量,赋值为字符串类型,Kotlin内部就已经认为此常量/变量是字符串类型了

Android-Kotlin-when&类型推断

package cn.kotlin.kotlin_base02

/**
* 类型推断(注意:类型推断 变量和常量是一样的,只要是第一次赋值,就内部就认为第一此的类型变量类型)
*/
fun main(args: Array<String>) { /**
* 定义一个常量,赋值为字符串类型,Kotlin内部就已经认为此aVal常量是字符串类型了
*/
val aVal = "AAAAAAA" /**
* 定义一个变量,赋值为字符串类型,Kotlin内部就已经认为此aVar变量是字符串类型了
*/
var aVar = "ABCDEFT" // 在给aVar赋值为99,会报错,因为aVar已经是字符串类型了
// aVar = 99 /**
* 定义一个变量,赋值为整形类型,Kotlin内部就已经认为此bVar变量是整形类型了
*/
var bVar = 1000 // 在给bVar赋值为ABCD,会报错,因为bVar已经是整形类型了
// bVar = "ABCD" /**
* 定义一个变量,赋值为浮点型类型,Kotlin内部就已经认为此cVar变量是浮点型类型了
*/
var cVar = 988.22 // 在给cVar赋值为100,会报错,因为cVar已经是浮点型类型了
// cVar = 100 // -----------------------
/**
* 以上没有指定变量类型,内部通过第一次赋值来决定类型的
* 而以下代码是,指定变量类型
*/
var zVar : String = "ABCDEF"
var z2Var : Int = 10000
var z3Var : Double = 564.45
var z4Var : Float = 1000.37f
// ......
}