kotlin写一个单例
时间: 2024-11-22 09:45:01 浏览: 19
在 Kotlin 中,你可以使用枚举类(Enum class)或者单例类配合懒加载的方式来创建一个线程安全的单例。这里我们给出两种常见的做法:
### 枚举类实现单例 (推荐)
```kotlin
enum class SingletonClass {
INSTANCE // 使用 "INSTANCE" 作为唯一值
// 构造函数被隐式禁止,使得外部无法创建新实例
constructor() : super(INSTANCE)
// 定义公共接口或方法
fun somePublicMethod() { /*...*/ }
}
// 获取单例
fun getInstance(): SingletonClass = SingletonClass.INSTANCE
```
**优点**:
- 简洁明了,不需要额外的同步机制。
- 由于枚举类是不可变的,所以它是线程安全的。
### 懒加载单例类
```kotlin
object LazySingleton {
// 使用 lazy 保证只初始化一次,并且线程安全
private val INSTANCE: Lazy<SingletonClass> = Lazy {
SingletonClass() // 构造函数在这里被初始化
}
// 获取单例
fun getInstance(): SingletonClass = INSTANCE.get()
}
```
**优点**:
- 利用 Kotlin 的 lazy 关键字实现了延迟初始化,节省了资源。
- 当你需要更复杂的初始化逻辑时,可以放在 lazy 初始化块中。
阅读全文