1:Elvis操作符 ?:
如果 ?: 左边表达式非空,elvis操作符就会返回左边的结果,否则返回右边的结果。
请注意,仅在左侧为空的时候,右侧的表达式才会计算。
fun elvisTest(b: String?) { val a= b?.length ?: -1 // 等价于 val a:Int = if( b!= null) b.length else -1 Log.d("alen","b is${b}" + ",a is " +a) }
2:类型转换as和安全转换 as?
当使用 as 转型的时候,可能会经常出现 ClassCastException。 所以,现在可以使as?安全转型,当转型不成功的时候,它会返回 null。
fun safeCast(param: Any) {
val m: Int? = if(param is Int) param else null
Log.d("alen","param is ${param}" + ",m is " + m)
val n: Int? = param as? Int
Log.d("alen","param is ${param}" + ",n is " +n)
}
3:kotlin空安全(Null Safety)
每一个开发人员都会遇到这样的问题:在使用某个对象时,必须得考虑这个对象是否为空。如果对象可能为空,则不得不需要写 if(object != null) 之类的代码,如果判断条件写反,或者少写了一个条件判断,应用就会在运行时出现Crash 了。于是我们千辛万苦写的代码,到头来却被各种 NullPointerException 害苦。而现在 Kotlin Null Safety 能帮助我们节省时间,脱离空指针的苦海。
Kotlin 定义变量有两种方式,可以为 Null 和不可以为 Null。在变量类型后面加?表示该变量可以为 Null。
//定义一个可以为null的变量 var name: String? = null //定义一个不可以为null的变量,如果此时赋值为null,则会报异常 val country: String = "china" //报错,可能为null的变量不可以直接调用其方法 // var length: Int = name.length //如果name为null则pass,如果name不为null则调用count()方法 var length: Int? = name?.count() //不管name是否为null都调用count()方法,如果为null,则抛出NullPointerException var count: Int = name!!.count() //由于country不为null,则可以直接调用其count方法 var countryCount: Int = country.count()
4:冒号:
1、类型和超类型之间的冒号前要有一个空格
2、实例和类型之间的冒号前不要空格
// 定义全局变量时 var str: String? = null // 类的继承与变量定义 class KotlinTestActivity<T : Serializable>(name: String) : Activity() { }
5:类型判断符 is
检查某个实例是否是某个类型,如果判断出属于某个类型,那么判断后的分支中可以直接可当该类型使用,无需显示转换。
fun getStringLength(obj: Any): Int {
if(obj is String && obj.length >0) {
return obj.length
}
return -1;
}
6:范围操作符 .. 以及 in
使用 in 运算符来检查某个数字是否在指定区间内
for(i in 1..5) { Log.d("alen","i is " +i) } // 结果 // i is 1 // i is 2 // i is 3 // i is 4 // i is 5
downTo()函数
//区间内循环:downTo()函数 for(i in 4 downTo 1) { //倒序遍历 Log.d("alen","i is " +i) } // i is 4 // i is 3 // i is 2 // i is 1
step()函数
可以进行任意数量的迭代,而不是每次变化都是1
// step()函数 可以进行任意数量的迭代,而不是每次变化都是1 for(i in 0..5 step 2) { Log.d("alen","i is " +i) } // i is 0 // i is 2 // i is 4 // 以步长为2从4到1进行循环 for(i in 4 downTo 1 step 2) { Log.d("alen","i is " +i) } // i is 4 // i is 2
多行输入符 三个双引号
三引号的形式用来输入多行文本,也就是说在三引号之间输入的内容将被原样保留,之中的单号和双引号不用转义,其中的不可见字符比如/n和/t都会被保留.
valstr = """ one two """ //等价于 val str = "one\ntwo" val str = "one"+"\n"+"two"
如果学习过程中有新的操作符会进行补充。