当前位置: 首页 > news >正文

【Kotlin】const 修饰的编译期常量

const 修饰的是编译期常量(compile-time constants),即编译器在编译时就能确定其值的常量。这类常量需要满足:

  • 类型必须是基本类型(Int、Double 等)或 String
  • 必须在编译时就能确定值(不能是运行时计算的结果)

以下是对 const 修饰的编译期常量三种存在场景的总结:

1. 顶层(文件级)常量

场景:直接定义在 Kotlin 文件的类外部,属于包级作用域,全局可见。

Kotlin 写法(文件名:AppConstants.kt):

package com.example// 顶层 const 常量
const val API_BASE_URL = "https://api.example.com"
const val MAX_RETRY_COUNT = 3

等效 Java 代码

package com.example;public final class AppConstantsKt {  // 类名由文件名 + "Kt" 构成public static final String API_BASE_URL = "https://api.example.com";public static final int MAX_RETRY_COUNT = 3;
}

特点

  • 编译后生成独立的 Java 类(文件名 + “Kt”)。
  • 常量被声明为 public static final,可直接通过类名访问(如 AppConstantsKt.API_BASE_URL)。

2. 伴生对象(companion object)内部常量

场景:定义在类的伴生对象中,属于类的静态成员,与类强关联。

Kotlin 写法

package com.exampleclass NetworkConfig {// 伴生对象中的 const 常量companion object {const val TIMEOUT_MS = 5000const val ENABLE_SSL = true}
}

等效 Java 代码

package com.example;public final class NetworkConfig {public static final int TIMEOUT_MS = 5000;public static final boolean ENABLE_SSL = true;// 伴生对象相关代码(无需手动使用)public static final NetworkConfig.Companion Companion = new NetworkConfig.Companion();public static final class Companion {}
}

特点

  • 常量直接成为外部类的 public static final 成员。
  • 可通过类名直接访问(如 NetworkConfig.TIMEOUT_MS)。

3. 单例类(object 声明)内部常量

场景:定义在 object 声明的单例类中,属于单例的静态成员(单例本身全局唯一)。

Kotlin 写法

package com.example// 单例类
object AppConfig {// 单例类中的 const 常量const val APP_VERSION = "1.0.0"const val IS_DEBUG = false
}

等效 Java 代码

package com.example;public final class AppConfig {public static final AppConfig INSTANCE = new AppConfig();  // 单例实例public static final String APP_VERSION = "1.0.0";public static final boolean IS_DEBUG = false;private AppConfig() {}  // 私有构造函数,确保单例
}

特点

  • 常量被编译为 public static final 成员,与单例实例无关。
  • 可通过单例类名直接访问(如 AppConfig.APP_VERSION)。

总结

三种场景的核心共性是:const 常量最终都会被编译为 Java 中的 public static final 静态成员,因此才能在编译期确定值并被直接访问。区别仅在于定义位置带来的作用域差异(包级、类级、单例级)。

http://www.dtcms.com/a/304857.html

相关文章:

  • 医疗超声成像专用AFE模拟前端
  • 【CSS】盒子类型
  • Qwen3-Coder:介绍及使用 -- 超强AI编程助手
  • CSRF漏洞原理及利用
  • 镜像源加速下载
  • 编辑距离:理论基础、算法演进与跨领域应用
  • 百度前端面试题目整理
  • 通过Power Automate获取SharePoint的Share Link
  • 计算机视觉(CV方向)算法基础
  • Apache Ignite 的连续查询(Continuous Queries)功能的详细说明
  • Apache Ignite 关于 容错(Fault Tolerance)的核心机制
  • 零件边界线提取处理原理详解
  • 如何解决人工智能在社会治理中面临的技术和伦理挑战?
  • 【工具】图床完全指南:从选择到搭建的全方位解决方案
  • 赢在AI时代:从创造力到编程力的教育突围
  • 聊聊自动化测试用例维护成本高应对策略
  • IntelliJ IDEA 配置 Maven 阿里云镜像加速源全流程
  • AAA 与 FTP:网络认证授权及文件传输的原理与实践
  • AT8236-4A单通道直流有刷电机驱动芯片
  • Qt 移动应用性能优化策略
  • 编程技术杂谈3.0
  • [CSP-J 2022] 逻辑表达式
  • 仓颉编程语言类型特点
  • 如何用USRP捕获手机信号波形(下)协议分析
  • 小孙学变频学习笔记(十二)机械特性的调整 机械特性的改善
  • 山东重工集团:以全自动化生产重构重卡制造业新范式
  • Docker运行Ollama
  • stm32的can总线
  • 简历美容院:如何把“打杂经历“包装成“核心项目“?
  • 在Word和WPS文字中把全角数字全部改为半角