kotlin的 object和companion object


 

object 生成类

public static final class MyObject {
  public static final TestKt.MyObject INSTANCE;

  public final void aaa() {
    String var1 = "-------";
    boolean var2 = false;
    System.out.println(var1);
  }

  private MyObject() {
  }

  static {
    TestKt.MyObject var0 = new TestKt.MyObject();
    INSTANCE = var0;
  }
}

companion object 匿名 生成java类名
public static final class Companion {
  public final void b() {
    Log.e(TestKt.TAG, "此时 companion object 表示 伴生对象");
  }

  private Companion() {
  }

  // $FF: synthetic method
  public Companion(DefaultConstructorMarker $constructor_marker) {
    this();
  }  
}

从上面生成的java代码来看 companion object 与 object是:
共同点: 都是static final类 ,都是private构造器 , 方法都是final
不同点, object 算简单饿汉式单例,生成了实例

companion object 匿名 生成java类名为 Companion ,可能也是一个类中只能有一个companion object的原因

 

kotlin不加open 都是final类

加上 volatile 是为了可见性和禁止重排序,这样就可以保证把参数传递进去的同时,确保线程安全

 

https://blog.csdn.net/Coo123_/article/details/90677170

本文介绍了在 Kotlin 下,实现单例模式的一些代码技巧,希望对大家有所帮助。最后再简单总结一下。

  1. 无参单例模式,直接使用 Kotlin 的 object 即可,它是依赖类的初始化锁来保证线程安全。
  2. 带参单例模式,可以使用双重检查锁 + @Volatile 来实现,如果嫌麻烦还可以封装成 SingletonHolder。
  3. lazy() 委托确实可以实现延迟加载,但是在单例模式的场景下,不如直接用object 方便。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM