@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編譯器為包含默認參數(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
用來注解方法和字段情竹,使得被標記的元素只能在kotlin代碼中使用藐不,在java代碼中無法使用。
@JvmSuppressWildcards
用來注解類和方法秦效,使得被標記元素的泛型參數(shù)不會被編譯成通配符