Kotlin实战指南十七:JvmField、JvmStatic使用
生活随笔
收集整理的這篇文章主要介紹了
Kotlin实战指南十七:JvmField、JvmStatic使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/116668666
本文出自【趙彥軍的博客】
文章目錄
- 往期精彩文章
- @JvmField
- @JvmStatic
- JvmStatic 作用于伴生對象
往期精彩文章
Kotlin實戰指南十六:Synchronized、Volatile
Kotlin實戰指南十五:協程泄漏
Kotlin實戰指南十四:協程啟動模式
@JvmField
JvmField 是針對kotlin 字段來說的,有兩重意思:
- 消除了變量的getter與setter方法
- 把變量用 public 暴露出來
轉換成 java 類
public final class Util {private final int age = 1;public final int getAge() {return this.age;} }可以看到,a1 是私有的,并且對外暴露了 getAge 方法,如果 age 是 var 類型,還會暴露 setAge 方法。
下面我們加上 JvmField 注解后,再看看
class Util {@JvmFieldvar age = 1}轉成 java 文件
public final class Util {@JvmFieldpublic int age = 1; }通過前后對比,我們可以得出結論
- JvmField 注解可以消除 get / set 方法
- JvmField 注解是的屬性以 public 的形式對外暴露
@JvmStatic
只能在object類或者伴生對象companion object中使用,而@JvmField沒有這些限制
JvmStatic 作用:
- 只能在object類或者伴生對象companion object中使用
- 作用于屬性時,會把 get / set方法變成靜態的
- 作用于方法時,會把該方法變成靜態的
轉成 java
public final class Util {private static int age;@NotNullpublic static final Util INSTANCE;public final int getAge() {return age;}public final void setAge(int var1) {age = var1;}public final void run() {}private Util() {}static {Util var0 = new Util();INSTANCE = var0;age = 1;} }加上 JvmStatic 后再觀察
object Util {@JvmStaticvar age = 1@JvmStaticfun run() {} }轉換成 java 后
public final class Util {private static int age;@NotNullpublic static final Util INSTANCE;/** @deprecated */// $FF: synthetic method@JvmStaticpublic static void age$annotations() {}public static final int getAge() {return age;}public static final void setAge(int var0) {age = var0;}@JvmStaticpublic static final void run() {}private Util() {}static {Util var0 = new Util();INSTANCE = var0;age = 1;} }JvmStatic 作用于伴生對象
- 作用于屬性時,會在伴生對象外面額外生成靜態 set / get 方法
- 作用于方法時,會在伴生對象外面額外生成靜態方法
轉成 java 后
public final class Util {private static int age = 1;@NotNullpublic static final Util.Companion Companion = new Util.Companion((DefaultConstructorMarker)null);public static final class Companion {public final int getAge() {return Util.age;}public final void setAge(int var1) {Util.age = var1;}public final void run() {}private Companion() {}// $FF: synthetic methodpublic Companion(DefaultConstructorMarker $constructor_marker) {this();}} }加上 JvmStatic 后,我們再觀察
class Util {companion object {@JvmStaticvar age = 1@JvmStaticfun run() {}}}轉成 java 后
public final class Util {private static int age = 1;@NotNullpublic static final Util.Companion Companion = new Util.Companion((DefaultConstructorMarker)null);public static final int getAge() {Util.Companion var10000 = Companion;return age;}public static final void setAge(int var0) {Util.Companion var10000 = Companion;age = var0;}@JvmStaticpublic static final void run() {Companion.run();}public static final class Companion {/** @deprecated */// $FF: synthetic method@JvmStaticpublic static void age$annotations() {}public final int getAge() {return Util.age;}public final void setAge(int var1) {Util.age = var1;}@JvmStaticpublic final void run() {}private Companion() {}// $FF: synthetic methodpublic Companion(DefaultConstructorMarker $constructor_marker) {this();}} }總結
以上是生活随笔為你收集整理的Kotlin实战指南十七:JvmField、JvmStatic使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kotlin实战指南十六:Synchro
- 下一篇: Kotlin实战指南十八:open、in