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