这些东西在Kotlin中有什么用?

时间:2019-07-16 07:17:31

标签: kotlin constructor visibility access-modifiers

我一直在学习Kotlin,目前面临两个问题。

  

私有构造函数的用途是什么?
  私人的用途是什么   构造函数中的参数?

  1. 我们甚至无法创建具有私有构造函数的类的实例

  2. 构造函数中的私有参数...

因此,它们将仅在该类中可见?但是,他们做到了,并且在构造函数中没有private修饰符。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

私有构造函数

类似于java。如果类仅具有私有构造函数,则可以禁止创建类实例。或者,您可以允许此类负责创建其实例(就像在Singleton模式中完成的一样)。

class Singleton private constructor(val name: String) {
    companion object {
        fun getInstance(): Singleton {
            return Singleton()   // Simplified
        }
    }
}

构造函数私有参数

如果类C的构造函数具有一个val s: String参数,它将成为实例的公共属性,可以像C.s一样进行访问。如果我们将此类参数声明为private,它将成为实例私有属性。

class Holder(private val pri: String, val pub: String) {
}

val holder = Holder("private", "public")
holder.pub    // contains "public"
holder.pri    // not accessible

答案 1 :(得分:1)

这与Java私有构造函数相同,您可以使用伴侣对象方法实例化该类。

class Foo private constructor(val someData: Data) {
    companion object {
        fun constructorA(): Foo {
            // do stuff

            return Foo(someData)
        }
    }

    // ...
}