Kotlin关键词 object的使用

1、声明外部类

作用是java 饿汉单例模式,关于单例模式内容可以看这篇关于单例模式的内容

https://blog.csdn.net/wuqiqi1992/article/details/107862703

package com.androidtv.pos.single

/**
 * @author wuqiqi
 * date on 2020/8/7
 * describe 声明对象
 */
object LoginUtils {

}

我们通过 Tools->Kotlin->show kotlin bytecode,可以查看kotlin生成的java代码

package com.androidtv.pos.single;

import kotlin.Metadata;

@Metadata(
   mv = {1, 1, 16},
   bv = {1, 0, 3},
   k = 1,
   d1 = {"\u0000\f\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\bÆ\u0002\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002¨\u0006\u0003"},
   d2 = {"Lcom/androidtv/pos/single/LoginUtils;", "", "()V", "app_debug"}
)
public final class LoginUtils {
   public static final LoginUtils INSTANCE;

   private LoginUtils() {
   }

   static {
      LoginUtils var0 = new LoginUtils();
      INSTANCE = var0;
   }
}

实际上就是饿汉单例模式

2、声明内部类

相当于声明了一个静态内部单例类 (同1相似)

package com.androidtv.pos.single

/**
 * @author wuqiqi
 * date on 2020/8/7
 * describe 声明内部class
 */
class LoginUtils {
    object LoginItem{

    }
}

用工具查看java代码:

package com.androidtv.pos.single;

import kotlin.Metadata;

@Metadata(
   mv = {1, 1, 16},
   bv = {1, 0, 3},
   k = 1,
   d1 = {"\u0000\f\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0003\u0018\u00002\u00020\u0001:\u0001\u0003B\u0005¢\u0006\u0002\u0010\u0002¨\u0006\u0004"},
   d2 = {"Lcom/androidtv/pos/single/LoginUtils;", "", "()V", "LoginItem", "app_debug"}
)
public final class LoginUtils {
   @Metadata(
      mv = {1, 1, 16},
      bv = {1, 0, 3},
      k = 1,
      d1 = {"\u0000\f\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\bÆ\u0002\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002¨\u0006\u0003"},
      d2 = {"Lcom/androidtv/pos/single/LoginUtils$LoginItem;", "", "()V", "app_debug"}
   )
   public static final class LoginItem {
      public static final LoginUtils.LoginItem INSTANCE;

      private LoginItem() {
      }

      static {
         LoginUtils.LoginItem var0 = new LoginUtils.LoginItem();
         INSTANCE = var0;
      }
   }
}

3、表达式的使用

类似于java的匿名内部类

4、同 Companion 一起使用

伴生对象

先写一部分:等有时间再弄

猜你喜欢

转载自blog.csdn.net/wuqiqi1992/article/details/107863806