kotlin var,val,const val修饰符编译

前言

kotlin的var,val,const的区别网上有很多的文章了,但是这些关键字在companion object和top-level情况下的多种情况又是怎么样的?本文通过编译成Java代码来探讨

kotlin类中var val const编译情况

class MyTest{
	var test0: String = "aaa"
	// 编译后:private String test0 = "aaa";

    @JvmField var test1: String = "aaa"
    // 编译后:public String test1 = "aaa";

    val test2:String = "aaa"
	// 编译后:private final String test2 = "aaa";
	
    @JvmField val test3:String = "aaa"
    // 编译后:public final String test3 = "aaa";
}

kotlin companion object 中var val const编译情况

class MyTest{
	companion object{
		var test4:String = "aaa"
		// 编译后:private static String test4 = "aaa";

        @JvmField var test5:String = "aaa"
        // 编译后:public static String test5 = "aaa";

        val test6:String = "aaa"
        // 编译后:private static final String test6 = "aaa";

        @JvmField val test7: String = "aaa"
        // 编译后:public static final String test7 = "aaa";

        const val test8:String = "aaa"
        // 编译后:public static final String test8 = "aaa";
	}
}

kotlin top-level 中var val const编译情况

var test9: String = "aaa"
// 编译后: private static String test9 = "aaa";

@JvmField var test10: String = "aaa"
// 编译后: public static String test10 = "aaa";

val test11: String = "aaa"
// 编译后: private static final String test11 = "aaa";

@JvmField val test12: String = "aaa"
// 编译后: public static final String test12 = "aaa";

const val test13:String = "aaa"
// 编译后: public static final String test13 = "aaa";

以上是var val const val在companion object,top-level情况下编译结果。
对于以上的结果,可以总结下:

  1. var:被private修饰,提供public的setter和getter相关方法
  2. val:被private final修饰,提供public的getter相关方法
  3. const val:被public static final修饰(只能用于top-level,object和companion object)
  4. companion object,object和top-level:加上static修饰
  5. @JvmField:加上public修饰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rockyou666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值