2017-05-25 69 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岁