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

Kotlin 中的 companion object 使用指南

companion object 是 Kotlin 中一个非常有用的特性,它允许你在类内部定义一个伴随对象,这个对象与类本身相关联(类似于 Java 中的静态成员,但更强大)。

基本用法

class MyClass {companion object {const val CONSTANT = "This is a constant"fun create(): MyClass = MyClass()}
}

主要特点

替代静态成员

// 调用方式
val instance = MyClass.create()
val constant = MyClass.CONSTANT

可以命名

class MyClass {companion object Factory {fun create(): MyClass = MyClass()}
}

实现接口

interface Factory<T> {fun create(): T
}class MyClass {companion object : Factory<MyClass> {override fun create(): MyClass = MyClass()}
}

扩展函数

class MyClass {companion object 
}fun MyClass.Companion.printHello() {println("Hello")
}// 使用
MyClass.printHello()

与 Java 互操作

Kotlin 的 companion object 成员在 Java 中可以通过 Companion 访问:

// Java 中调用
MyClass.Companion.create();

如果你想在 Java 中像静态成员一样使用,可以添加 @JvmStatic 注解:

companion object {@JvmStaticfun create(): MyClass = MyClass()
}

这样在 Java 中就可以直接调用 MyClass.create()

实际应用场景

工厂方法

class User private constructor(val name: String) {companion object {fun create(name: String): User {return User(name)}}
}

常量定义

class Constants {companion object {const val API_URL = "https://api.example.com"}
}

单例模式

class Singleton {companion object {val instance: Singleton by lazy { Singleton() }}
}

注意事项

  • companion object 在类加载时初始化(类似于 Java 的静态初始化)
  • 每个类只能有一个 companion object
  • companion object 可以访问类的私有成员
  • companion object 是 Kotlin 中实现类级别功能和数据的优雅方式,比 Java 的静态成员更灵活和强大。

http://www.xdnf.cn/news/10479.html

相关文章:

  • (LeetCode 每日一题)135. 分发糖果 ( 贪心 )
  • 电子电气架构 --- 如何应对未来区域式电子电气(E/E)架构的挑战?
  • 【安全】VulnHub靶场 - W1R3S
  • STM32:CAN总线精髓:特性、电路、帧格式与波形分析详解
  • 单元测试-断言常见注解
  • 探索大语言模型(LLM):参数量背后的“黄金公式”与Scaling Law的启示
  • 使用 OpenCV (C++) 进行人脸边缘提取
  • ASC格式惯导数据文件转IMR格式文件
  • window 显示驱动开发-驱动程序处理的Multiple-Processor优化
  • 使用 So-VITS-SVC 实现明星声音克隆与视频音轨替换实战全流程
  • 云部署实战:基于AWS EC2/Aliyun ECS与GitHub Actions的CI/CD全流程指南
  • SpringBoot-配置Spring MVC
  • 学习经验分享【40】目标检测热力图制作
  • 基于SpringBoot运动会管理系统设计和实现(源码+文档+部署讲解)
  • CppCon 2014 学习:Decomposing a Problem for Parallel Execution
  • 详解|证券、基金、期货:银证转账系统
  • 监控 100 台服务器磁盘内存CPU利用率
  • 赛事获奖|TsingtaoAI荣获“雄才杯”2025创新创业大赛总决赛奖项
  • 调用蓝耘API打造AI 智能客服系统实践教程
  • 对抗攻击 Adversarial Attack
  • 【MySQL基础】库的操作:创建、删除与管理数据库
  • 【Part 3 Unity VR眼镜端播放器开发与优化】第二节|VR眼镜端的开发适配与交互设计
  • 电脑故障基础知识
  • docker-部署Nginx以及Tomcat
  • OpenCV——Mac系统搭建OpenCV的Java环境
  • 一键开关机电路分析
  • python第39天打卡
  • 网页前端开发(基础进阶2--JS)
  • 【Day42】
  • 常量指真,指针常量 ,