1. 程式人生 > >Kotlin建構函式

Kotlin建構函式

建構函式

當Kotlin中的類需要建構函式時,可以有一個主建構函式和多個次建構函式可以沒有次建構函式。主建構函式在類名後。

//常規用法
class Person(name: String) {
}

當主建構函式有註解或者可見性修飾符,需加 constructor 關鍵字。

class Personpublic public @Inject constructor(name: String){
}

1、主建構函式

主建構函式不能包含任何的程式碼。初始化的程式碼可以放到以 init 關鍵字作為字首的初始化塊中:

1、當在主函式中聲明後可以當做全域性變數使用
這裡寫圖片描述

注:
1、函式的宣告可以是val也可以是var


2、當不在主建構函式中宣告又想當全域性變數使用,可在類中宣告,主函式中宣告是簡化了其寫法。

class Test(name: String){
    val name = name
    //。。。
}

2、當不在主函式中宣告時,只能在初始化塊以及屬性宣告中使用
這裡寫圖片描述

2、次建構函式

1、次建構函式不能有宣告 val 或 var
2、如果類有一個主建構函式(無論有無引數),每個次建構函式需要直接或間接委託給主建構函式,用this關鍵字

class Person {

    constructor() {

    }

    constructor(name: String
)
:
this() { } constructor(name: String, age: Int) : this(name) { } }
class Customer(){

    constructor(name: String):this() {

    }

    constructor(name: String, age: Int) : this(name) {

    }

}

3、當沒有主構造引數時,建立次建構函式
正確使用:

class Customer{

    constructor(name: String) {

    }
constructor(name: String, age: Int) : this(name) { } }

錯誤使用:

class Customer{
    //沒有主建構函式,使用委託this()錯誤
    constructor(name: String) : this() {

    }

    constructor(name: String, age: Int) : this(name) {

    }

}

3、建構函式的使用

兩種建構函式結果相同,呼叫時都可直接呼叫,或傳遞一個引數或兩個引數進行呼叫

class Test{
    init{
        test()
        test2()
    }
    fun test(){
        Person()
        Person("李四")
        Person("李四",18)
    }
    fun test2(){
        Customer()
        Customer("李四")
        Customer("李四",18)
    }
}