kotlin中单例类初始化参数如何传入
时间: 2024-05-08 21:19:54 浏览: 237
在 Kotlin 中,单例类的初始化参数可以通过伴生对象的方式传入。具体来说,可以在单例类内部定义一个带有参数的实例化方法,这个方法会取代类的构造方法,然后在伴生对象中定义一个名为 INSTANCE 的静态变量,用于保存单例对象的实例。在使用单例对象的时候,可以直接通过访问 INSTANCE 变量来调用方法。举个例子,下面是一个带有初始化参数的单例类的示例代码:
```
class MySingleton private constructor(val name: String) {
fun sayHello() {
println("Hello, I'm $name.")
}
companion object {
private var instance: MySingleton? = null
fun getInstance(name: String): MySingleton {
instance = instance ?: MySingleton(name)
return instance!!
}
}
}
fun main() {
val s1 = MySingleton.getInstance("John")
val s2 = MySingleton.getInstance("Mary")
s1.sayHello() // 输出:Hello, I'm John.
s2.sayHello() // 输出:Hello, I'm John.
}
```
在上面的示例中,我们定义了一个名为 MySingleton 的单例类,并在构造方法中传入一个名为 name 的字符串参数。为了避免外界直接通过构造方法来创建单例对象,我们将其私有化,并在类内部定义了一个名为 getInstance 的实例化方法,在这个方法中会判断单例对象是否已经创建,如果没有,则创建一个新对象并保存到 instance 变量中,最后返回该对象。在 main 函数中我们分别通过 getInstance 方法获取了两个 MySingleton 对象,并调用它的 sayHello 方法来输出两个对象的名字。
阅读全文
相关推荐















