单例模式 → object 声明

单例模式 → object 声明

老写法(Java)

java 复制代码
// 饿汉式
public class AppConfig {
    private static final AppConfig INSTANCE = new AppConfig();

    private AppConfig() {}

    public static AppConfig getInstance() { return INSTANCE; }

    public String getBaseUrl() { return "https://api.example.com"; }
}

// 懒汉式(双重检查)
public class LazyConfig {
    private static volatile LazyConfig instance;

    private LazyConfig() {}

    public static LazyConfig getInstance() {
        if (instance == null) {
            synchronized (LazyConfig.class) {
                if (instance == null) {
                    instance = new LazyConfig();
                }
            }
        }
        return instance;
    }
}

// 使用
String url = AppConfig.getInstance().getBaseUrl();

新写法(Kotlin)

kotlin 复制代码
// 饿汉式 --- 一行
object AppConfig {
    val baseUrl = "https://api.example.com"
}

// 懒汉式
val lazyConfig: LazyConfig by lazy {
    LazyConfig()
}

// 使用
val url = AppConfig.baseUrl

一句话注意

object 声明的单例是线程安全的------Kotlin 编译器保证初始化在首次访问时执行且只执行一次。底层用的是 Java 的 static final 持有实例 + 同步块,等价于 DCL 但不用手写。

by lazy 的初始化也是线程安全的(默认 LazyThreadSafetyMode.SYNCHRONIZED),首次访问时执行 lambda 并缓存结果。如果确定是单线程访问,可以 lazy(LazyThreadSafetyMode.NONE) {} 省掉同步开销。


Java Android 老项目迁移系列,持续更新中。

相关推荐
程序员陆业聪1 小时前
读者点单·03|Compose 与传统 View 混用的 12 个真实坑
android
程序员陆业聪2 小时前
读者点单·02|Android 启动优化实战:Trace 抓取→Application 编排→冷启动全流程拆解
android
Coffeeee2 小时前
帮你快速理解AI Agent之我想招个Android实习生
android·人工智能·agent
用户298698530142 小时前
Java 实现 Word 文档文本与图片提取的方法
java·后端
SimonKing3 小时前
铁子,IntelliJ IDEA 2026.1.3来了,升不升?
java·后端·程序员
恋猫de小郭3 小时前
苹果 AirPods 协议,Android 也可以使用完整版 AirPods 能力
android·前端·flutter
黄林晴3 小时前
告别无效重建:Gradle 9.6.0 解决 CI 构建缓存失效痛点告别无效重建:Gradle 9.6.0 解决 CI 建筑缓存失效痛点
android·gradle
张风捷特烈4 小时前
Flutter 类库大揭秘#01 | path_provider架构与设计
android·flutter