Kotlin object修饰符

object修饰class
  • 下面是object修饰class的一个简单例子,就用object修饰 ObjTest,然后定义了一个 初始为0 的val i 和 一个str,还有一个go方法
object ObjTest {

    val i = 0

    val str = "hello"

    fun go() {
    	val str = "am go"
        println("我是go方法")
    }
}

接下来我们看一下反编译成的java代码是什么样子。

public final class ObjTest {
   private static final int i = 0;
   @NotNull
   private static final String str = "hello";
   public static final ObjTest INSTANCE;

   public final int getI() {
      return i;
   }

   @NotNull
   public final String getStr() {
      return str;
   }

   public final void go() {
      String str = "am go";
      String var1 = "我是go方法";
      System.out.println(var1);
   }

   static {
      ObjTest var0 = new ObjTest();
      INSTANCE = var0;
      str = "hello";
   }
}

通过java代码我们可以发现,object修饰的类反编译成java代码以后,是一个final修饰的class,final修饰不能被继承,同时int i 和 str 两个变量被 static final修饰,并且只提供了get方法,并且public static final ObjTest INSTANCE; ,在静态代码块中初始化了INSTANCE实例,这是一个单利模式的class。
所以,object修饰的class,修饰不能被继承,其成员变量为静态且final且不可修改,方法也为final修饰
在Kotlin中调用如下

val clazz = ObjTest

java中调用方式如下

ObjTest objTest = ObjTest.INSTANCE;
objTest.go();
objTest.getI();
object修饰匿名内部类
object Test {
    @JvmStatic
    fun main(args: Array<String>) {
        val kClazz = KClazz()
        kClazz.go(object : IObjListener {
            override fun o() {
            }
        })
    }
}

同样看一下反编译成的java代码

public final class Test {
   public static final Test INSTANCE;

   @JvmStatic
   public static final void main(@NotNull String[] args) {
      Intrinsics.checkParameterIsNotNull(args, "args");
      KClazz kClazz = new KClazz();
      kClazz.go((IObjListener)(new IObjListener() {
         public void o() {
         }
      }));
   }

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

object就是其中的(IObjListener)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值