2017-05-25 66 views
4

因爲我有一個User類有2個參數:first_name,last_name。所以我科特林類爲:構造函數與Kotlin重載

data class User(val first_name:String, val last_name:String) 

現在我想一個構造函數,將只接受first_name,或者可以說只是一個參數。我如何用Kotlin來定義它?

我知道我們可以通過默認值,並以這種方式我們可以忽略第二個參數,但我們如何編寫多個構造函數?

+0

這種情況..你不」我想創建另一個構造函數..因爲在Kotlin中,我們可以使用參數作爲可選項 –

+2

https://kotlinlang.org/docs/reference/classes.html –

+1

爲什麼你想要第二個構造函數而不是last_name的默認值?順便說一下,在java和kotlin中,你應該使用CamelCase而不是SnakeCase – D3xter

回答

0

Kotlin中的類可以具有主構造函數和一個或多個輔助構造函數。主構造函數是類頭的一部分:它在類名(和可選的類型參數)之後。

class Person constructor(firstName: String) { 
} 

如果主構造沒有任何註釋或能見度改性劑,可以省略構造關鍵字:

class Person(firstName: String) { 
} 

注意,主構造的參數可以在初始化塊中使用。

class Customer(name: String) { 
    val customerKey = name.toUpperCase() 
} 

您也可以按照這個鏈接根據自己的需要:他們也可以在類體內聲明的屬性初始化使用Kotlin

9

您可以在類體內定義額外的構造

data class User(val firstName: String, val lastName: String) { 

    constructor(firstName: String) : this(firstName, "") 

} 

這些「輔助構造函數」必須調用主構造函數或不同的輔助構造函數。請參閱Official documentation on constructors

所以,實際上這與帶有默認參數的主要構造函數是一樣的,這將是慣用的方式。

data class User(val firstName: String, val lastName: String = "") 
0

我希望這將有助於你

class Person(val name: String, val age: Int = 0) { 
    override fun toString(): String { 
     return name + " is " + age + " years Old" 
    } 
} 

fun main(args: Array<String>) { 
    var person = Person(name = "vignesh") 
    var personNew = Person("vignesh", 23) 
    println(person.toString()) 
    println(personNew.toString()) 
} 

輸出

維涅什是0歲

維涅什是23歲