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

网站建设dwm以图搜图

网站建设dwm,以图搜图,ui设计和平面设计有什么区别,亦庄建站推广在 Kotlin 中,companion object 的初始化触发时机是一个重要但容易被忽视的细节。以下是详细的解释: 1. 基本触发时机 companion object 的初始化发生在: 首次访问该类时(无论是访问伴生对象成员、创建类实例,还是通过…

在 Kotlin 中,companion object 的初始化触发时机是一个重要但容易被忽视的细节。以下是详细的解释:

1. 基本触发时机

companion object 的初始化发生在:

  • 首次访问该类时(无论是访问伴生对象成员、创建类实例,还是通过反射访问类)

  • 类似于 Java 的静态初始化块,但更灵活

  • class MyClass {companion object {init {println("Companion object 初始化!") }val CONST = "Hello"}
    }fun main() {println("程序启动")MyClass.CONST  // 第一次访问 MyClass 时触发初始化
    }

 输出

程序启动
Companion object 初始化!

2. 具体触发场景

以下操作都会触发 companion object 初始化:

(1) 直接访问伴生对象成员

MyClass.CONST          // 触发
MyClass.Companion      // 触发

(2) 创建类实例

val obj = MyClass()    // 触发

(3) 通过反射访问类

MyClass::class          // 触发(Kotlin 反射)

(4) 访问类的其他声明

MyClass::class          // 触发(Kotlin 反射)

3. 不会触发的情况

以下操作不会触发初始化:

// 仅声明类型(未实际访问)
val clazz: Class<MyClass> = MyClass::class.java  // 作为类型参数(未实例化或访问)
fun process(clazz: Class<*>) {}
process(MyClass::class.java)  // 不会触发

4. 与 Java 静态初始化的对比

特性Kotlin companion objectJava static 块
初始化时机首次访问类时类加载时
懒加载是(按需初始化)否(类加载时强制初始化)
线程安全是(JVM 保证)

5. 实际应用中的注意事项

(1) 性能优化
class HeavyInitialization {companion object {val HEAVY_RESOURCE = loadResource() // 避免在伴生对象中放重型初始化}
}// 改为懒加载
class BetterApproach {companion object {val heavyResource by lazy { loadResource() }}
}
(2) 循环依赖问题
class A {companion object {val VALUE = B.VALUE  // 如果 B 的伴生对象也依赖 A,会导致栈溢出}
}class B {companion object {val VALUE = A.VALUE}
}

解决方案:使用 lazy 延迟初始化

class A {companion object {val VALUE by lazy { B.VALUE }}
}

6. 验证示例

class Test {companion object {init { println("伴生对象初始化") }}init { println("类实例初始化") }
}fun main() {println("阶段1")Test::class  // 仅访问 KClass,不触发println("阶段2")Test.Companion // 触发初始化println("阶段3")Test() // 伴生对象已初始化,不会再次触发
}

输出

阶段1
阶段2
伴生对象初始化
阶段3
类实例初始化

总结

  • companion object 在首次真正使用类时初始化(懒加载)
  • 比 Java 的静态初始化更灵活,但逻辑相似
  • 适合存放类级别的常量、工厂方法等
  • 避免在伴生对象中直接进行重型操作,建议用 by lazy

http://www.dtcms.com/wzjs/393924.html

相关文章:

  • 天津网站优化实战关键词搜索神器
  • 泉州网站建设哪家专业网络营销的四个步骤
  • 亚马逊虚拟主机做网站大兴今日头条新闻
  • 医院网站管理制度百度提交网站入口网址
  • 网站导航栏制作seo网站关键词优化快速官网
  • 如何做国外网站全网营销推广方式
  • 网上做问卷调查赚钱哪些网站好东莞网站建设平台
  • 推广网站报价西安seo公司哪家好
  • 网站建设公司专业网站开发制作链接搜索引擎
  • 做网站难吗中国疾控卫生应急服装
  • 网站域名注册需要什么手续游戏推广拉人渠道
  • 图片设计软件app合肥seo网站排名优化公司
  • 自己服务器做网站如何备案百度自然排名优化
  • 做再生料的网站黑科技引流软件是真的吗
  • 郑州企业建设网站技术企业营销型网站建设
  • 国外购物网站大全百度发广告需要多少钱
  • 志愿服务网站建设方案seo搜索引擎优化课后答案
  • dw做的网站怎样才有域名营销型网站的类型
  • 一台服务器如何做两个网站品牌运营推广方案
  • 保险公司十大排名沈阳网站seo
  • 郑州的网站建设公司免费企业网站建设流程
  • 做网站su网站建设哪家好公司
  • 青岛开发区网站建设aso优化方法
  • 网站翻书效果百度一下就知道官方网站
  • 建设购物网站的条件重庆专业seo
  • 12306网站能不能用银河二计算机做服务器啊慢得要死爱站工具网
  • 高新区做网站seo优化思路
  • wordpress 蜘蛛插件北京seo费用是多少
  • 建设大型网站需要什么硬件免费域名邮箱
  • 网站建设网络推广的好处网站推广优化公司