Kotlin學習筆記系列:http://blog.csdn.net/column/details/16696.html
1、類 類是空的可以省略大括号, 如: class A(name: String) 注意:kotlin與java的一個不同點,代碼句結尾不必加“;”号
2、類繼承 預設是final的,是以隻能繼承那些明确聲明open或abstract的類。
3、函數 一切kotlin函數都會傳回一個值,如果沒有指定預設傳回一個Unit類 可以省略結尾分号 當傳回值用一個表達式即可計算出來,可以使用等号代替大括号,如: fun add(x: Int, y: Int) Int = x + y
4、預設參數 為參數指定一個預設值,這樣這個參數就成了可選,如: fun toast(msg: String, length: Int = Toast.LENGTH_LONG){ ... } 使用時就可以不傳length這個參數,如: toast("test toast")
5、通過參數名傳參 假設函數: fun toast(msg: String, tag: String = "default", length: Int = Toast.LENGTH_LONG) 可以這樣使用: toast(msg = "hello", length = 1000) 這樣可以忽略中間某個預設參數
6、執行個體化 執行個體化省略new關鍵字,如 var layoutManager = LinearLayoutManager(this)
7、伴随對象companion object 在kotlin中使用companion object來定義一些靜态屬性、常量和靜态函數,這個對象被這個類所有對象共享,類似java中的靜态變量和方法, 如:
class Circle(var r: Float){
companion object{
var pi = 3.14f
}
fun getLength(): Float{
return 2 * pi * r
}
}
8、接口 kotlin的接口與java接口不同之處在于kotlin的借口可以包含代碼,如:
interface TestInterface {
var i : Int
fun test(){
i = 3
}
fun interfaceMethod()
}
可以看到在接口中可以定義變量和函數,而實作接口的子類可以直接使用變量和函數,如:
class TestInterfaceClass(override var i: Int) : TestInterface{
override fun interfaceMethod() {
test()
i = 4
}
}
9、别名 在java中,如果有兩個相同名稱的類,在同一個類中使用時,其中一個類需要使用完整包名。 在kotlin中,可以指定一個别名來避免使用完整包名,如:
import com.test.common.Product
import com.test.model.Product as ProdectModel
這樣在代碼中隻要使用ProductModel就可以了,如:
var productA = Product()
var productB = ProdectModel()
但是注意,有了别名的類就不能在該類中使用原有的類名了。
10、修飾符 在kotlin中預設的修飾符是public,節約了很多時間和字元。
kotlin中的修飾符有private\protected\internal\public 其中internal是整個module可見的,當然它依賴于所在領域的可見性(比如private類下的internal函數)。這裡的module就是android studio中的module概念,是指可以單獨編譯、運作、測試的獨立功能性子產品。
所有構造器預設都是public的,但是可以用下面的文法來修改可見性: class C private contructor(a: Int){ ... }
11、内部類 在kotlin中内部類如果是普通類,則無法通路外部類成員(類似java中的static靜态内部類),如
class ModelA{
val a = 1
class ModelB{
val b = a
}
}
上面的val b = a代碼就會報錯無法編譯。 如果想在内部類通路外部類成員,需要用inner修飾,如
class ModelA{
val a = 1
inner class ModelB{
val b = a
}
}
這樣就可以正常編譯運作。