为什么要使用Kotlin随播对象而不是初始化程序块进行创建?

CW *_* II 0 constructor kotlin

#37 Kotlin教程| 随播对象| 工厂模式表示,创建复杂的类时可以使用Kotlin伴随对象。

随播对象|  工厂模式

Kotlin主构造器和初始化器块显示了如何在类中使用Kotlin初始化器块。

fun main(args: Array<String>) {
    val person1 = Person("joe", 25)
}
class Person(fName: String, personAge: Int) {
    val firstName: String
    var age: Int
    // initializer block
    init {
        firstName = fName.capitalize()
        age = personAge
        println("First Name = $firstName")
        println("Age = $age")
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么要使用伴随对象而不是初始化程序块来执行此操作?

关于这个问题,我对Java没有兴趣。

Jag*_*uar 6

这种从构造器(或Kotlin中的init块)考虑静态工厂方法(即Kotlin中的伴侣对象)的做法已从Java世界中借用了。

Java中静态工厂方法和构造函数之间的差异与Kotlin中伴随对象和init块之间的差异几乎相同。

这是一篇中型文章,它巧妙地描述了伴随对象的优点。总结一下:

  1. 与构造函数不同,它们具有名称
  2. 与构造函数不同,它们不需要在每次调用时都创建一个新对象
  3. 与构造函数不同,它们可以返回其返回类型的任何子类型的对象
  4. 它们减少了创建参数化类型实例的冗长性

编辑:添加了AjahnCharles的注释,因为这是一个有效的用例。

  1. 他们可以返回一个空对象,从而指示为创建该对象而传递了无效的参数。()

与所有设计模式一样,伴随对象也有缺点:

  1. 它们不能用于子类构造
  2. 它们不易与其他静态方法区分开