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

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://ZlelZ8vJ.nbhft.cn
http://ZGeoB0dH.nbhft.cn
http://1pzLhBnq.nbhft.cn
http://5YQM7Q5i.nbhft.cn
http://PhuzwG2Y.nbhft.cn
http://qJ8P1mck.nbhft.cn
http://euMURO3z.nbhft.cn
http://G7883Qvm.nbhft.cn
http://Pyhty6Bb.nbhft.cn
http://L5EyAkFO.nbhft.cn
http://PP3oWWTK.nbhft.cn
http://BPUHnxcp.nbhft.cn
http://W5toZdez.nbhft.cn
http://0cG3EoKb.nbhft.cn
http://N0YlCFXh.nbhft.cn
http://lgXPxZxs.nbhft.cn
http://a1QB7GKv.nbhft.cn
http://ahcFsOOx.nbhft.cn
http://RBTCsvae.nbhft.cn
http://uDtB7HxM.nbhft.cn
http://jwRGHeFp.nbhft.cn
http://FhAJc7WK.nbhft.cn
http://DSpf6eMP.nbhft.cn
http://6KLrZYZl.nbhft.cn
http://rzCvUA2l.nbhft.cn
http://8uTm7ifp.nbhft.cn
http://M8ShpWU6.nbhft.cn
http://TWCUgP8J.nbhft.cn
http://kCMDDP0l.nbhft.cn
http://eCgOJzl6.nbhft.cn
http://www.dtcms.com/a/227208.html

相关文章:

  • DDR5舍入定义和算法Rounding Definitions and Algorithms详细讲解
  • 修改vscode切换上一个/下一个标签页快捷键
  • ps照片滤镜
  • 嵌入式学习笔记 - freeRTOS在程序开始在任务内创建任务的好处是什么
  • 【Java Web】速通Tomcat
  • Spring Cloud 开发入门:环境搭建与微服务项目实战(上)
  • 专业C++Qt开发服务,助力您的软件项目腾飞!
  • YARN应用日志查看
  • 数字化转型全场景安全解析:从产品到管理的防线构建与实施要点
  • 《软件项目管理》第一章(概述)期末周复习总结笔记
  • Oracle授权操作
  • 1. 前言与安装pytorch、d2l
  • 企业级应用狂潮:从Spotify到LinkedIn的Llama实战手册
  • 代码随想录算法训练营第四天| 242.有效的字母异位词 、 349. 两个数组的交集 、 202. 快乐数 、1. 两数之和
  • 六级翻译技巧
  • Linux配置DockerHub镜像源配置
  • HashMap与ConcurrentHashMap详解:实现原理、源码分析与最佳实践
  • 【AI+若依框架】基础应用篇
  • C++string1号
  • 谷歌CEO皮查伊眼中的“下一代平台“与未来图景
  • 华为OD机试_2025 B卷_虚拟游戏理财(Python,100分)(附详细解题思路)
  • 【数据分析】第二章 Python基础
  • 技术博客:线程池的暗礁——Executors工厂类为何成为Java高并发系统的禁忌
  • 【数据分析】第三章 numpy(1)
  • 个人总结八股文之-基础篇(持续更新)
  • 中国城市规模指数(1992-2023)
  • 思维链提示:激发大语言模型推理能力的突破性方法
  • 20250602在荣品的PRO-RK3566开发板的Android13下打开HDMI显示
  • oracle sql 语句 优化方法
  • 为什么ping显示connect:network is unreachable,如何排查网络不通问题?