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"