kotlin注解

2021-06-23  本文已影响0人  wayne777

@JvmField

指示Kotlin编译器不为该属性生成getter/setter,并将其作为字段公开。
如果用来修饰val变量,就和const关键字的功能一样了(类似于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编译器为包含默认参数值的函数生成重载。

例1:简化自定义view的构造函数

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

指定从该元素中生成静态方法需要。注意:此注解只能用于被object关键字修饰的类的方法,或者companion object (或Companion代指)中的方法

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


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

@JvmSynthetic

用来注解方法和字段,使得被标记的元素只能在kotlin代码中使用,在java代码中无法使用。

@JvmSuppressWildcards

用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符

上一篇下一篇

猜你喜欢

热点阅读