kotlin注解


@JvmField

指示Kotlin編譯器不為該屬性生成getter/setter,并將其作為字段公開。
如果用來修飾val變量,就和const關(guān)鍵字的功能一樣了(類似于java:public static final)。

var a: String = ""

編譯后:
@NotNull
private static String a = "";

@NotNull
public static final String getA() {
    return a;
}

public static final void setA(@NotNull String var0) {
    Intrinsics.checkParameterIsNotNull(var0, "<set-?>");
    a = var0;
}

---------------------------------------------------------

@JvmField 
var a: String = ""

編譯后:
@JvmField
@NotNull
public static String a = "";


@JvmField 
val a: String = ""

編譯后:
@JvmField
@NotNull
public static final String a = "";

@JvmOverloads

指示Kotlin編譯器為包含默認(rèn)參數(shù)值的函數(shù)生成重載。

例1:簡化自定義view的構(gòu)造函數(shù)

class EmptyView : LinearLayout{

   @JvmOverloads 
   constructor (context: Context, attrs: AttributeSet? =null,defStyle: Int =0) :
       LinearLayout(context, attrs, defStyle) {
   }

}

編譯后:
public class EmptyView extends LinearLayout {
 
    public EmptyView(Context context) {
        this(context, null);
    }
 
    public EmptyView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }
 
    public EmptyView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
 
}

例2:

   @JvmOverloads 
   fun a(str:String,i:Int=0){}

編譯后:
   void a(String str){
       a(str,0)
   }
   void a(String a ,int i){
   }

@JvmStatic

指定從該元素中生成靜態(tài)方法需要。注意:此注解只能用于被object關(guān)鍵字修飾的類的方法,或者companion object (或Companion代指)中的方法

object A {
    @JvmStatic fun a() {}
}


class A {
    companion object {
        @JvmStatic fun a() {}
    }
}

@JvmSynthetic

用來注解方法和字段,使得被標(biāo)記的元素只能在kotlin代碼中使用,在java代碼中無法使用。

@JvmSuppressWildcards

用來注解類和方法,使得被標(biāo)記元素的泛型參數(shù)不會被編譯成通配符

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容