Kotlin 中这些东西的用途是啥?

Posted

技术标签:

【中文标题】Kotlin 中这些东西的用途是啥?【英文标题】:What is an usage of these things in Kotlin?Kotlin 中这些东西的用途是什么? 【发布时间】:2019-11-24 21:01:01 【问题描述】:

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

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

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

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

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

感谢任何帮助!

【问题讨论】:

【参考方案1】:

私有构造函数

类似于java。如果类只有私有构造函数,您可以禁止创建类实例。或者您可以允许此类负责创建其实例(就像在单例模式中所做的那样)。

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

【讨论】:

【参考方案2】:

这和Java私有构造函数一样,你可以使用伴生对象方法来实例化类。

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

            return Foo(someData)
        
    

    // ...

【讨论】:

以上是关于Kotlin 中这些东西的用途是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin:“return@”是啥意思?

Kotlin 什么是幕后字段?

Kotlin 中字段的“open”关键字是啥? [复制]

使用 Kotlin 在 android 中声明 UI 组件的最佳方法是啥?

“.()”在 Kotlin 中是啥意思?

Kotlin 中的@Named 是啥?