当前位置: 首页 > 知识库问答 >
问题:

科特林的什么私人建造者?

罗允晨
2023-03-14

我是科特林的新手。我想问Kotlin的私人建造者是干什么的?类DontCreateMe私有构造函数(){/*...*/}。我的意思是,如果我们不能创建它的实例,应该是什么类呢?

共有1个答案

袁宜民
2023-03-14

嗯,评论中的答案是正确的,但因为没有人写一个完整的答案。我要试试看。

拥有私有构造函数并不一定意味着外部代码不能使用对象。这只是意味着外部代码不能直接使用它的构造函数,所以它必须通过类作用域中公开的API获得实例。因为这个API在类范围内,所以它可以访问私有构造函数。

最简单的例子是:

class ShyPerson private constructor() {
    companion object {
        fun goToParty() : ShyPerson {
            return ShyPerson()
        }
    }
}

fun main(args: String) {
   // outside code is not directly using the constructor
   val person = ShyPerson.goToParty()

   // Just so you can see that you have an instance allocated in memory
   println(person)
}
class Unity private constructor() {
    companion object {
        private var INSTANCE : Unity? = null

        // Note that the reason why I've returned nullable type here is
        // because kotlin cannot smart-cast to a non-null type when dealing
        // with mutable values (var), because it could have been set to null 
        // by another thread.
        fun instance() : Unity? {
            if (INSTANCE == null) {
               INSTANCE = Unity()
            } 
            return INSTANCE
        }
    }
}

fun main(args: Array<String>) {
   val instance = Unity.instance()
   println(instance)
}

我所见过的kotlin代码中最简单的用法之一是stdlib的结果实现,它用于更改对象的内部表示。

 类似资料:
  • 如何在静态编程语言中声明辅助构造函数? 有相关文件吗? 以下内容不编译...

  • 在kotlin中定义一个有公共getter和私有(只有内部可修改)setter的var的正确方法是什么?

  • 这是正确的吗? 我可以找到一个相关的问题,但它是有参数的,我不能在没有params的情况下转换它。

  • 不知道这是什么意思,但我在kotlin html代码库中遇到了这种语法。SCRIPT.()是什么意思? https://github.com/Kotlin/kotlinx.html/blob/master/shared/src/main/kotlin/generated/gen-tag-unions.kt#L143 剧本是一种https://github.com/Kotlin/kotlinx.ht

  • 如何在使用Kotlin的Spring Boot中正确初始化ConfigurationProperties? 目前我喜欢下面的例子: 但是它看起来很丑陋,实际上不是一个iable,foo是常量ue,应该在启动期间初始化,将来不会改变。

  • 问题内容: 我正在学习具有C ++和Java背景的Kotlin。我期待下面的打印,不。我知道这对应到。默认实现不比较每个成员,即和吗?如果是这样,它会不会看到字符串值相等(因为再次映射到字符串值)?显然,我在Kotlin中还没有涉及平等与身份相关的问题。 问题答案: 您描述的默认实现仅适用于数据类。不适用于从中继承实现的常规类,只需使对象与自身相等即可。