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();
   }
}

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

2020.4.15
使用单例类的写法会将整个类中的方法全部变为类似静态方法, 但有时候需求是只希望某类的某个方法变为静态方法, 可使用companion object

举个例子

class MyClass {
    fun printI(a: Int){
        println("The value is $a")
    }

    companion object{
        fun printII(a: Int){
            println("The value is $a")
        }
    }
}

调用和Java调用某类静态方法一致
注意: 这里只是使用MyClass的伴生对象调用方法, 与实际静态方法还是有区别的

如果需要定义真正的静态方法, 可以将方法定义为顶层方法(创建xxx.kt文件). 对于在顶层方法中的方法, Kotlin编译器会把所有顶层方法编译为静态方法, 所有的顶层方法都可以在任意位置被直接调用, 不用管包名, 也不用创建实例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值