【问题标题】:Constructor overloading with Kotlin使用 Kotlin 重载构造函数
【发布时间】:2017-05-25 08:48:31
【问题描述】:

因为我有一个 User 类有 2 个参数:first_name,last_name。所以我的 kotlin 类是:

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

现在我想要一个只接受first_name 的构造函数,或者你可以只说一个参数。如何用Kotlin 定义它?

我知道我们可以传递默认值,这样我们就可以忽略第二个参数,但是我们如何编写多个构造函数呢?

【问题讨论】:

  • 对于这种情况..你不想创建另一个构造函数..因为在 Kotlin 中,我们可以使用参数作为可选
  • 为什么你想要第二个构造函数而不是 last_name 的默认值?顺便说一句,在 java 和 kotlin 中,你应该使用 CamelCase 而不是 SnakeCase

标签: android kotlin


【解决方案1】:

你可以在类体中定义额外的构造函数

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 = "")

【讨论】:

    【解决方案2】:

    希望对你有帮助

    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 岁

    【讨论】:

      【解决方案3】:

      Kotlin 中的类可以有一个主构造函数和一个或多个辅助构造函数。主构造函数是类头的一部分:它位于类名(和可选类型参数)之后。

      class Person constructor(firstName: String) {
      }
      

      如果主构造函数没有任何注释或可见性修饰符,则可以省略构造函数关键字:

      class Person(firstName: String) {
      }
      

      请注意,主构造函数的参数可以在初始化块中使用。它们也可以用在类主体中声明的属性初始化器中:

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

      您也可以根据需要点击此链接:Kotlin

      【讨论】:

        【解决方案4】:

        如果您正在使用数据类,那么您将不需要另一个构造函数。只需将默认值传递给您的 last_name 参数。 如果您使用的是普通类,那么您可以使用辅助构造函数 假设你有 A 类

        class A(val param:String,val param2:String){
         constructor(val param:String):this(param,"")
        }
        

        如果您希望操作这些值,您可以使用 init{} 块,您可以在其中玩弄您的构造函数值。

        我希望这会有所帮助。

        【讨论】:

          【解决方案5】:

          此代码示例对我来说很好,您可以根据需要自定义它们。

          数据类Booking( var 用户:字符串, var 自行车:字符串 ){ 构造函数( 用户:字符串, 自行车:字符串, 采取_at:字符串, 返回_at:字符串 ) : 这个(用户,自行车) }

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多