gpt4 book ai didi

kotlin - 拥有私有(private)构造函数并在伴随对象中使用方法来实例化类有什么好处?

转载 作者:行者123 更新时间:2023-12-02 12:42:29 31 4
gpt4 key购买 nike

我碰到了这段代码,我不确定为什么有人会这样做。基本上,作者决定将类构造函数设为私有(private),这样它就不能在文件外实例化,并在类中的伴随对象中添加了一个公共(public)方法,以创建该类的新实例。这种方法有什么好处?

这是我发现的:

class Foo private constructor(private val arg1: Any) {
//more code here..
companion object {
fun newFoo(arg1: Any) = Foo(arg1 = arg1)
}
}

为什么比这更好?
class Foo(private val arg1: Any) {
//more code here..
}

最佳答案

提供工厂方法而不是公共(public)构造函数有几个好处,包括:

  • 它可以在调用 contrustor 之前进行大量处理。 (如果父类(super class)构造函数采用需要计算的参数,这可能很重要。)
  • 它可以在适当的情况下返回缓存值而不是新实例。
  • 它可以返回一个子类。 (这允许您将顶级类作为接口(interface),如另一个答案中所述。)确切的类在调用之间可能不同,甚至可以是匿名类型。
  • 它可以有一个名称(如另一个答案中所述)。如果您需要多个方法采用相同的参数,这一点尤其重要。 (例如,可以从矩形或极坐标构造的 Point 对象。)但是,工厂方法不需要特定名称;如果您实现 invoke()伴生对象中的方法,您可以以与构造函数完全相同的方式调用它。
  • 它使更改类的实现更容易,而不会影响其公共(public)接口(interface)。

  • 它还有一个重要的缺点:
  • 子类构造函数不能使用它。

  • 工厂方法在 Kotlin 中的使用似乎比 Java 少,这可能是因为 Kotlin 的主要构造函数和属性的语法更简单。但它们仍然值得考虑——尤其是 Kotlin 伴生对象可以继承。

    如需更深入的信息,请参阅 this article ,查看 Effective Java 中的建议以及它如何应用于 Kotlin。

    关于kotlin - 拥有私有(private)构造函数并在伴随对象中使用方法来实例化类有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54679237/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com