【发布时间】:2019-02-13 20:52:55
【问题描述】:
我碰到了这段代码,我不知道为什么有人会这样做。基本上,作者决定将类构造函数设为私有,这样它就不能在文件外实例化,并在类中的伴随对象中添加了一个公共方法,以创建该类的新实例。这种方法有什么好处?
这是我发现的:
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..
}
【问题讨论】:
-
一般来说,它允许您稍后更改实现,无论是更改为新的子类型,还是稍后重新构建类的构造函数等等。它还可以让你定义一个更详细的 name 来构造对象,这比类型的名称更详细。
-
查找“静态工厂方法”。例如,stackoverflow.com/questions/929021/…
标签: kotlin