syntax - Kotlin 二级构造函数

标签 syntax constructor kotlin

如何在 Kotlin 中声明辅助构造函数?

有相关的文档吗?

以下不编译...

class C(a : Int) {
  // Secondary constructor
  this(s : String) : this(s.length) { ... }
}

最佳答案

更新:自 M11 (0.11.*) Kotlin 支持 secondary constructors .


目前 Kotlin 仅支持主构造函数(以后可能会支持辅助构造函数)。

二级构造函数的大多数用例都通过以下技术之一解决:

技术 1.(解决你的问题)在你的类旁边定义一个工厂方法

fun C(s: String) = C(s.length)
class C(a: Int) { ... }

用法:

val c1 = C(1) // constructor
val c2 = C("str") // factory method

技术2.(也可能有用)定义参数的默认值

class C(name: String? = null) {...}

用法:

val c1 = C("foo") // parameter passed explicitly
val c2 = C() // default value used

请注意,默认值适用于任何函数,不仅适用于构造函数

技术 3.(当你需要封装时)使用在伴随对象中定义的工厂方法

有时你希望你的构造函数是私有(private)的,并且只有一个工厂方法可供客户端使用。目前这只能通过 companion object 中定义的工厂方法实现:

class C private (s: Int) {
    companion object {
        fun new(s: String) = C(s.length)
    }
}

用法:

val c = C.new("foo")

关于syntax - Kotlin 二级构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19299525/

相关文章:

java - 构造函数和构造函数重载

c# - 部分是什么意思?

Python:如何将制表符转换为空格?

java - 静态方法调用

c++ - 如何从另一个文件调用类构造函数?

java - 如何从一个类调用另一个类的构造函数?

c# - 如何制作具有实现两个接口(interface)的类型约束的通用集合?

java - 为什么 Hibernate 延迟加载在 Kotlin 中表现不同?

java - Kotlin: [内部错误] java.lang.ArrayIndexOutOfBoundsException: 446

kotlin - 如何使用不同数据类的属性更新 kotlin 数据类