Kotlin 初探:object

可创建单例

将普通类的class直接替换为object即创建单例类
单例类调用方法语法:类名.方法名(与Java调用类的静态方法一致)

class MyClass {
    
    private val i = 1

    fun printI(){
        println(i)
    }
}

//调用
fun main(array: Array<String>) {
    MyClass().printI()
}

转换成java代码如下(AS:Tools - Kotlin - show Kotlin Bytecode 单击Decompile按钮)

public final class MyClass {
   private final int i = 1;

   public final void printI() {
      int var1 = this.i;
      boolean var2 = false;
      System.out.println(var1);
   }
}

替换如下

object MyClass {

    private val i = 1

    fun printI(){
        println(i)
    }
}

//调用
fun main(array: Array<String>) {
    MyClass.printI()
}

转换成java代码如下

public final class MyClass {
   private static final int i = 1;
   public static final MyClass INSTANCE;

   public final void printI() {
      int var1 = i;
      boolean var2 = false;
      System.out.println(var1);
   }

   private MyClass() {
   }

   static {
      MyClass var0 = new MyClass();
      INSTANCE = var0;
      i = 1;
   }
}

可见类似Java创建单例

将普通类的方法调用转换为Java代码

public final class WelcomeKt {
   public static final void main(@NotNull String[] array) {
      Intrinsics.checkParameterIsNotNull(array, "array");
      (new MyClass()).printI();
   }
}

中规中矩
将单例类的方法调用转换为Java代码

public final class WelcomeKt {
   public static final void main(@NotNull String[] array) {
      Intrinsics.checkParameterIsNotNull(array, "array");
      MyClass.INSTANCE.printI();
   }
}

可见其调用为:该类的单例对象调用方法。即一个对自己持有引用的静态成员调用了方法

发布了14 篇原创文章 · 获赞 2 · 访问量 1395

猜你喜欢

转载自blog.csdn.net/AneTist/article/details/104017220